我使用g++ -Wall -Werror *.cpp
进行编译并得到错误:
ConcreteCharArray.h:21:15:错误:将“~CharArray”声明为“ConcreteCharArray”的成员
具体实现:
class ConcreteCharArray: public CharArray
{
private:
char * charArray;
public:
~CharArray() {
delete[] string;
}
};
虚拟类:
class CharArray
{
public:
virtual ~CharArray() {};
};
最佳答案
在名为 ConcreteCharArray
的类中声明名为 ~CharArray
的成员是非法的,这是编译器告诉您的。 ~
的存在表明您正在声明一个析构函数,并且析构函数的名称必须与类的名称匹配。
析构函数是特殊成员函数。它们的特殊属性之一是,为了重写基类的虚拟析构函数,您不必匹配派生类中该析构函数的名称(就像通常对普通成员函数所做的那样)。编译器会自动将析构函数相互匹配,即使它们的名称不同。这很容易做到,因为每个类都有一个且只有一个析构函数。
因此,如果您想在类 ConcreteCharArray
中声明析构函数,则必须调用该析构函数 ~ConcreteCharArray
。没有其他选择。即使派生析构函数的名称与基析构函数的名称不同,派生析构函数也将被视为虚拟析构函数并覆盖基析构函数。
关于C++错误: declaration of ‘~Destructor’ as member of ‘Class’ ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18808151/