我使用g++ -Wall -Werror *.cpp
进行编译并收到错误:
ConcreteCharArray.h:21:15: error: declaration of ‘~CharArray’ as member of ‘ConcreteCharArray’
具体实施:
class ConcreteCharArray: public CharArray
{
private:
char * charArray;
public:
~CharArray() {
delete[] string;
}
};
虚拟课程:
class CharArray
{
public:
virtual ~CharArray() {};
};
答案 0 :(得分:3)
在名为~CharArray
的类中声明名为ConcreteCharArray
的成员是非法的,这是编译器告诉您的。 ~
的存在表明您正在声明析构函数,析构函数的名称必须与类的名称匹配。
析构函数是特殊成员函数。它们的一个特殊属性是,为了覆盖基类的虚析构函数,您不必在派生类中匹配该析构函数的名称(正如您通常使用普通成员函数那样)。编译器会自动将析构函数相互匹配,即使它们的名称不同。这很容易做到,因为每个类只有一个析构函数。
因此,如果要在类ConcreteCharArray
中声明析构函数,则必须调用该析构函数~ConcreteCharArray
。没有其他选择。即使派生的析构函数的名称与基本析构函数的名称不同,派生的析构函数也将被视为虚拟的,并将覆盖基础析构函数。