如果基类析构函数是虚拟的,派生类的析构函数是否默认为虚拟?
我最近在阅读有关虚函数和虚析构函数的文章,提出了以下问题。
例如,我有以下继承链。
class Base
{
public:
virtual ~Base() // note: virtual
{
std::cout << "Calling ~Base()n";
}
};
class Derived: public Base
{
public:
~Derived()
{
std::cout << "Calling ~Derived()n";
}
};
我读到基类的虚函数在派生类中默认为隐式虚函数。所以,我认为这同样适用于析构函数。
我想知道,派生类的析构函数是否默认是虚拟的。如果没有,如果您提供一些解释,我会很高兴。
回答
我认为这同样适用于析构函数
确实如此,是的。
我想知道,如果派生类的析构函数默认是虚拟的
在这个例子中,是的。
一旦某物被标记为virtual,则该某物的所有覆盖后代也都是virtual,无论它们是否明确说明。
因此,如果一个方法是virtual,则所有覆盖它的派生方法也是virtual。如果析构函数是virtual,则所有派生析构函数也是virtual。