Delphi学习笔记

来源:互联网 发布:cms远程摄像头破解软件 编辑:程序博客网 时间:2024/05/20 18:03

1>引用对象与结构对象,对于OO实现的影响。
    OO中非常非常重要的一点就是可以使用虚拟函数。使用虚拟函数需要必然的类型转换。
    那么对于Delphi来说,这些基本可以不用考虑。
   而在VC++中的话,主要使用指针及引用来进行OO中子类到父类的类型转换。一定不能
   直接使用赋值的方式来转换,因为这样做的话,该对象通常就会被阉割了。
  
   

2>VC++与Delphi中的RTTI使用上的区别
    VC++ 中的RTTI精简,使用的一组宏。C++本身的RTTI功能则不是很好用,功能太少了。
    DELPHI 的RTTI则是可以把语言与IDE结合得更紧,目前我所知道的RTTI技术,是需要一个基类的。
    在MFC中是CObject,在Delphi中是TObject.然而,VC++中新建立的类可以不用继承自CObject,那么MFC中的RTTI
    就没法用了。而Delphi由于在Pascal语言中的强势,所以说Delphi是Pascal,Pascal是Delphi也是可以的。
    而在Delphi中所有的类,必须直接或间接的继承自TObject,所以Delphi中的RTTI更常用。


2>异常处理与资源泄露
    在C++中只能使用try...catch...方式处理异常,而在Delphi中则可以使用finally处理。
    通常Delphi在finally中处理了生成资源的回收。
   TObj obj = TObj.Create();
   try
   begin
    //do something
   end
   finally
   begin
      obj.Free(); //
   end;


   而C++中的对象产生异常,则需要这样:
   CObj *obj = new CObj();
   try
   {
       //do something
   }
   catch (...)
   {
       delete obj;
       obj = NULL;
   }
   if (obj) delete obj;
  显得冗长,幸运的是,C++中的对象可以生成在栈中。于是我们可以使用智能指针进行资源的回收。甚至可以不需要使用try。

  另外,由于Delphi中的Record类型才能生成在栈中,而OO对象只能生成在堆中。所以Delphi也只能使用那一种方式。
 
 
3>类型安全与强制转换
   Delphi中的Pointer可能转换成任何Pascal Object。所以减分。
   但是Dephi中的任何地方都可以使用RTTI,所以对他有加分。
   在VC++中指针是非常裸的,所以如果没有其它手段(比如智能指针)保障,那能他的安全可以说是差到不能再差了。
   另外对于强制转换,在Delphi中由是使用单继承,所以这方面他也有一些好处(其实就是可以了解更少)。
   VC++可以使用多继承,由于其虚函数表的实现方式影响。因此,VC++的对象指针在转换后其内存地址可能会不一样。
   因此C++ 中为了正确的进行转换会有一组相应的转换函数static_cast ,reinterpret_cast,dynamic_cast。
   注:我这里说的强制转换与上面说的类型转换是有些不一样。第一次说的是从子类到父类的转换,而这里
            说得更多的是父类到子类的转换。一般来说这是需要RTTI的。所以VC++中的dynamic_cast的正确使用需要开启C++中的RTTI功能
  
 
4>异常发生时的调试:
   Delphi IDE中有个非常好的功能,那就是在设计时(这里我定义为,在Dephi中运行程序)产生的异常能够定位在最近的源码那里,非常方便。
  不过听说在.NET以后等的异常信息可以回朔,就好象查看函数调用的堆栈那样。非常方便,不过这都是题外了。

 

 

原创粉丝点击