如果基 class 析构函数是虚拟的,派生的 class 的析构函数是否默认是虚拟的?
Is the destructor of a derived class virtual by-default if the base class destructor is virtual?
最近在看虚函数和虚析构函数,引起了下面的疑问。
例如,我有以下继承链。
class Base
{
public:
virtual ~Base() // note: virtual
{
std::cout << "Calling ~Base()\n";
}
};
class Derived: public Base
{
public:
~Derived()
{
std::cout << "Calling ~Derived()\n";
}
};
我读到基 class 的虚函数在派生的 class 中默认是隐式虚函数。所以,我认为这同样适用于析构函数。
我想知道派生的 class 的析构函数是否默认是虚拟的。如果没有,如果您提供一些解释,我将很高兴。
I thought that the same would apply to the destructors
确实如此,是的。
I would like to know, if the destructor of the derived class is virtual by-default
在这个例子中,是的。
一旦某个东西被标记 virtual
,那个东西的所有覆盖后代也都是 virtual
,无论他们是否明确地声明它。
所以,如果一个方法是 virtual
,那么所有覆盖它的派生方法也是 virtual
。如果析构函数是 virtual
,则所有派生的析构函数也是 virtual
.
最近在看虚函数和虚析构函数,引起了下面的疑问。
例如,我有以下继承链。
class Base
{
public:
virtual ~Base() // note: virtual
{
std::cout << "Calling ~Base()\n";
}
};
class Derived: public Base
{
public:
~Derived()
{
std::cout << "Calling ~Derived()\n";
}
};
我读到基 class 的虚函数在派生的 class 中默认是隐式虚函数。所以,我认为这同样适用于析构函数。
我想知道派生的 class 的析构函数是否默认是虚拟的。如果没有,如果您提供一些解释,我将很高兴。
I thought that the same would apply to the destructors
确实如此,是的。
I would like to know, if the destructor of the derived class is virtual by-default
在这个例子中,是的。
一旦某个东西被标记 virtual
,那个东西的所有覆盖后代也都是 virtual
,无论他们是否明确地声明它。
所以,如果一个方法是 virtual
,那么所有覆盖它的派生方法也是 virtual
。如果析构函数是 virtual
,则所有派生的析构函数也是 virtual
.