| 订阅 | 在线投稿
分享
 
 
当前位置: 王朝网络 >> delphi >> Delphi和C++的语法区别 Delphi he C++ de yu fa qu bie
 

Delphi和C++的语法区别

2006-12-05 19:16:37 编辑來源:互联网 繁體版 评论
 
 
本文为【Delphi和C++的语法区别】的汉字拼音对照版显示拼音
  mulu

   Delphiyongyuanmeibanfazaizhanshangchuangjianyigeduixiang

   Delphidegouzaohanshugengxiangshigeleifangfajingtaichengyuanhanshu

   Delphidexigouhanshuzhongkeyitiaoyongchunxufangfa

   Delphizaigouzaoduixiangshizidongjiangchengyuanbianliangqingling

   Delphigouzaohanshuzhongpaochuyichanghuizidongxiantiaoyongxigouhanshu

   DelphijianhualeCOMjiekoudeAddRefReleaseheQueryInterface

  yiDelphiyongyuanmeibanfazaizhanshangchuangjianyigeduixiang

  xiamianshiyiduanchangjiandedeDelphidaimazaiguochengdekaitoushengmingbenguochengsuoxuyaodequanbujububianliang

  procedure Foo;

  var

   obj: TObject; //zhejurongyibeiC++chengxuyuanwuhui

  begin

   ...

  end;

  C++chengxuyuanhuiyiweiobjzhegebianliangjiushiTObjectduixiangshilibenshenhuiyiweizheyijushizaizhanshangshengmingbinggouzaoleTObjectleideyigeduixiangshilitamenhuiyuxiamiandeC++daimahunxiao

  void Foo() { CObject obj; //zheyijudequezaizhanshanggouzaoleCObjectleide

   ... //yigeduixiangshilibingqiejiangzailikaiFoohanshushizidongxigouta

  }

  laojiyidianzaiDelphiliyongyuanbukenengzaizhanshanggouzaoyigeduixiangyeyongyuanbukenengduiyigeduixiangjinxingzhichuandichengxuyuannengkandaodeshi“zhixiangduixiangshilidezhizhen”jiandandishuo“yiqiejiezhizhen”shanglizhongobjqishijiushiyige“TObjectleixingdezhizhen”dangtazaizhanshangbeishengmingdeshihoutadezhibukezhiyuC++yiyangyemeiyourenheduixiangbeigouzaochulaishangshudaimafanyichengC++jibenshangjiushi

  void Foo() {

   CObject * obj; // shengmingyigeCObjectleixingdezhizhen

   // danmeiyourenheduixiangbeigouzaohuoyuzhiguanlian

   ...

  }

  zuoweiyigezuozhengzaiDelphilisizeof(TObject), sizeof(Self), sizeof(obj) jieguodoushi4jiyige32weizhizhendedaxiao

  erDelphidegouzaohanshugengxiangshigeleifangfajingtaichengyuanhanshu

  youyuDelphibuyuanxuzaizhanshanggouzaoduixiangnameduixiangshilijiuzhinengchuangjianzaiduishangDelphimeiyounewguanjianzidaoyouyigemingweiNewdeprocedureershiyongyizhongyoubieyuC++deyufalaizaiduishanggouzaoduixiang

  procedure Foo;

  var

   obj: TObject; //objbenzhishangzhishiyigeTObjectleixingdezhizhen

  begin

   obj := TObject.Create; //zaiduishanggouzaoyigeTObjectduixiangshilibingjiangqidizhifuzhigeiobj

   obj.Free; //lingobjzhixiangdeduixiangxigou

  end;

  yuC++yiyangzaiduishanggouzaodehanshubuhuizailikaizuoyongyudeshihoubeizidongxigousuoyizailikaiFoozhegeguochengzhixieyaotiaoyongTObjectdeFreefangfalaixigoutaFreefangfahuitiaoyongDestroyxigouhanshuzhibuguozaitiaoyongDestroyzhiqianhuipanduanSelfshifouweikongruguoweikongjiuzhijiefanhuiDelphilideSelfjiushiC++lidethis

  DelphishidangenjichengsuoyouleidoucongTObjectpaishengerlaiersuoyouleidegouzaohanshuyidingmingweiCreateerxigouhanshuyidingmingweiDestroydangranxigouhanshukendingshixuhanshu

  congshengmingdexingshishangkanCreatefangfaxiangshiyigechengyuanhanshudancong使shiyongshangkantagengxiangyigeleifangfaC++lijiaojingtaichengyuanhanshuyinweitiaoyongtadeshihouxiandingmingbushiduixiangershileimingTxxxxx.Create

  sanDelphidexigouhanshuzhongkeyitiaoyongchunxufangfa

  youyuzaiDelphidexigouhanshuDestroylikeyitiaoyongrenhechunxuhanshuzaiC++lizheyidianshibukexiangxiangdesuoyikeyirenweizhegeshihouxufangfabiaoyouyidingweibeipohuainameruguojileijiukeyijuedingxigoushiyidingyaotiaoyongdehanshunapazhegehanshushigexuhanshushenzhichunxuhanshu

  siDelphizaigouzaodeshihouzidongjiangchengyuanbianliangqingling

  renheyigeDelphizhongdeleidangtabeigouzaohoutadesuoyouchengyuanbianliangbeiqinglingbuerxingchushiweiFalsezifuchuanchushiweikongzhengxinghefudianxingchushihuawei0……erC++meiyouzheyangdebaozheng

  wuDelphigouzaohanshuzhongpaochuyichanghuizidongxiantiaoyongxigouhanshu

  DelphiliruguogouzaohanshuzhongpaochuleyichangzehuizidongxianzhixingxigouhanshuranhouzaibayichangxiangwaipaochuerzaiC++ligouzaohanshuzhongruoyouyichangpaochuzexigouhanshushibuhuibeitiaoyongde

  liuDelphijianhualeCOMjiekouzhongdeAddRefReleaseheQueryInterface

  C++liyibanyongmobanduiCOMjiekoujinxingfengzhuangerzaiDelphiliAddRefReleaseyijiQueryInterfacedoubeibianyiqiyincangdiaoledangbayigeIUnknownleixingdebianliangbenzhishangyeshiyigezhizhenfuzhigeilingyigebianliangshibianyiqizaibeihouzidongAddRefdangyigeIUnknownbianlianglikaizuoyongyudeshihouzaiyemeiyouren使shiyongtaReleasebeizidongtiaoyongerQueryInterfacebeichouxiangweiASyunsuanfu

  procedure Foo(const AParam: IUnknown);

  var

   bar: IUnknown;

   other: IStream;

  begin

   bar := AParam; //AParamzhixiangdeshiliyouyufuzhicaozuobeiAddRefyici

   other := bar as IStream; //tiaoyongleyiciQueryInterfaceyinyongjishuzaicijiayi

  end; //fanhuishiotherhebardoulikaizuoyongyufenbiebeitiaoyongReleasegeyici

  C++zhongyongmobanbiru_com_ptryekeyi使shiyinyongjishuzidonghuabuguoQueryInterfacejiumeinamefang便bianle原文】【拼音
 
 
 
上一篇《WIN32下DELPHI中的多线程【同步2】(五)》
下一篇《Borland传奇拾遗:BDS 2006/Delphi 2006》
 
 
 
 
 
 
日版宠物情人插曲《Winding Road》歌词

日版宠物情人2017的插曲,很带节奏感,日语的,女生唱的。 最后听见是在第8集的时候女主手割伤了,然后男主用嘴帮她吸了一下,插曲就出来了。 歌手:Def...

兄弟共妻,我成了他们夜里的美食

老钟家的两个儿子很特别,就是跟其他的人不太一样,魔一般的执着。兄弟俩都到了要结婚的年龄了,不管自家老爹怎么磨破嘴皮子,兄弟俩说不娶就不娶,老父母为兄弟两操碎了心...

如何磨出破洞牛仔裤?牛仔裤怎么剪破洞?

把牛仔裤磨出有线的破洞 1、具体工具就是磨脚石,下面垫一个硬物,然后用磨脚石一直磨一直磨,到把那块磨薄了,用手撕开就好了。出来的洞啊很自然的。需要猫须的话调几...

我就是扫描下图得到了敬业福和爱国福

先来看下敬业福和爱国福 今年春节,支付宝再次推出了“五福红包”活动,表示要“把欠大家的敬业福都还给大家”。 今天该活动正式启动,和去年一样,需要收集“五福”...

冰箱异味产生的原因和臭味去除的方法

有时候我们打开冰箱就会闻到一股异味,冰箱里的这种异味是因为一些物质发出的气味的混合体,闻起来让人恶心。 产生这些异味的主要原因有以下几点。 1、很多人有这种习...

 
 
目录 [url=http://dev.csdn.net/#stack_instance]Delphi永远没办法在栈上创建一个对象[/url] [url=http://dev.csdn.net/#class_method]Delphi的构造函数更象是个类方法(静态成员函数)[/url] [url=http://dev.csdn.net/#call_pure_virtual]Delphi的析构函数中可以调用纯虚方法[/url] [url=http://dev.csdn.net/#auto_clear]Delphi在构造对象时自动将成员变量清零[/url] [url=http://dev.csdn.net/#constructor_exception]Delphi构造函数中抛出异常会自动先调用析构函数[/url] [url=http://dev.csdn.net/#COM]Delphi简化了COM接口的AddRef、Release和QueryInterface[/url] 一、Delphi永远没办法在栈上创建一个对象 下面是一段常见的的Delphi代码,在过程的开头声明本过程所需要的全部局部变量: procedure Foo; var obj: TObject; //这句容易被C++程序员误会。 begin ... end; C++程序员会以为obj这个变量就是TObject对象实例本身,会以为这一句是在栈上声明并构造了TObject类的一个对象实例,他们会与下面的C++代码混淆: void Foo() { CObject obj; //这一句的确在栈上构造了CObject类的 ... //一个对象实例,并且将在离开Foo函数时自动析构它 } 牢记一点,在Delphi里,永远不可能在栈上构造一个对象,也永远不可能对一个对象进行值传递,程序员能看到的是“指向对象实例的指针”,简单地说“一切皆指针”,上例中obj其实就是一个“TObject类型的指针”,当它在栈上被声明的时候,它的值不可知(与C++一样),也没有任何对象被构造出来。上述代码翻译成C++,基本上就是: void Foo() { CObject * obj; // 声明一个CObject类型的指针 // 但没有任何对象被构造或与之关联 ... } 作为一个佐证,在Delphi里,sizeof(TObject), sizeof(Self), sizeof(obj) 结果都是4,即一个32位指针的大小。 二、Delphi的构造函数更象是个类方法(静态成员函数) 由于Delphi不允许在栈上构造对象,那么对象实例就只能创建在堆上,Delphi没有new关键字(倒有一个名为New的procedure),而是用一种有别于C++的语法来(在堆上)构造对象: procedure Foo; var obj: TObject; //obj本质上只是一个TObject类型的指针 begin obj := TObject.Create; //在堆上构造一个TObject对象实例并将其地址赋值给obj obj.Free; //令obj指向的对象析构 end; 与C++一样,在堆上构造的函数不会在离开作用域的时候被自动析构,所以在离开Foo这个过程之些,要调用TObject的Free方法来析构它。Free方法会调用Destroy析构函数,只不过在调用Destroy之前会判断Self是否为空,如果为空就直接返回。Delphi里的Self,就是C++里的this。 Delphi是单根继承,所有类都从TObject派生而来,而所有类的构造函数一定名为Create,而析构函数一定名为Destroy,当然,析构函数肯定是虚函数。 从声明的形式上看,Create方法象是一个成员函数,但从使用上看,它更象一个类方法(C++里叫静态成员函数),因为调用它的时候,限定名不是对象,而是类名(Txxxxx.Create)。 三、Delphi的析构函数中可以调用纯虚方法 由于在Delphi的析构函数Destroy里,可以调用任何纯虚函数(在C++里这一点是不可想象的),所以可以认为这个时候,虚方法表有一定未被破坏,那么,如果基类就可以决定析构时一定要调用的函数,哪怕这个函数是个虚函数,甚至纯虚函数。 四、Delphi在构造的时候自动将成员变量清零 任何一个Delphi中的类,当它被构造后,它的所有成员变量被清零,布尔型初始为False,字符串初始为空,整型和浮点型初始化为0……而C++没有这样的保证 五、Delphi构造函数中抛出异常会自动先调用析构函数 Delphi里,如果构造函数中抛出了异常,则会自动先执行析构函数,然后再把异常向外抛出;而在C++里,构造函数中若有异常抛出,则析构函数是不会被调用的。 六、Delphi简化了COM接口中的AddRef、Release和QueryInterface C++里一般用模板对COM接口进行封装,而在Delphi里,AddRef、Release以及QueryInterface都被编译器隐藏掉了,当把一个IUnknown类型的变量(本质上也是一个指针)赋值给另一个变量时,编译器在背后自动AddRef,当一个IUnknown变量离开作用域的时候(再也没有人使用它),Release被自动调用,而QueryInterface被抽象为AS运算符: procedure Foo(const AParam: IUnknown); var bar: IUnknown; other: IStream; begin bar := AParam; //AParam指向的实例由于赋值操作被AddRef一次 other := bar as IStream; //调用了一次QueryInterface,引用计数再次加一 end; //返回时,other和bar都离开作用域,分别被调用Release各一次 C++中用模板(比如_com_ptr)也可以使引用计数自动化,不过QueryInterface就没那么方便了。
󰈣󰈤
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
清凉一夏_清纯美丽
纯白色小礼服
靓丽可人儿_嘉嘉
我的女神_靓丽女生
主题摄影
贵州,让我欢喜,让我神伤。
莫干山
天平秋色
 
>>返回首页<<
 
 
 为你推荐
 
 
 
 转载本文
 UBB代码 HTML代码
复制到剪贴板...
 
 热帖排行
 
 
 
 
©2005- 王朝网络 版权所有