我想继承TForm的析构函数,可是总是报错,请问各位高手我怎么写才能继承vcl的析构函数?
在头文件中声明:
public: // User declarations
__fastcall TForm1(TComponent* Owner);//原来有的构造函数
__fastcall ~TForm1();//新声明的析构函数
在Cpp文件里定义:
__fastcall TForm1::~TForm1()
{
...//Your code
}
"可是为什么一定要加__fastcall?"
因为在TObject中的声明是:
virtual __fastcall ~TObject;
TObject是你的所有VCL类的基类,所以你要和它保持一致.
"如果TForm1还有子类怎么办?如果不能用virtual那么子类怎么能正确调用析构函数呢?"
我并没有说析构函数不能是virtual,正相反,如果这个类是准备用作基类的,它的析构函数就必须是virtual的,否则就会出现问题.而TObject已经遵循了这条规则,它的析构函数就是virtual的,你只管override就行了.在override时,不需要写virtual,因为C++规定,在基类中的virtual方法,在子类中以同样的方法名和参数列表同样的返回值出现时,自动是virtual的,是对基类的方法的override.
我这里没有用"重载"这个词,是为了和overload相区别.