为什么要把父类的析构函数定义成虚函数?

简介: 为什么要把父类的析构函数定义成虚函数?

问:为什么要把父类的析构函数定义成虚函数?

答:否则子类的析构函数可以未被调用,具体代码如下:

class A
{
public:
 A(){TRACE("A()/n");};
 ~A(){TRACE("~A()/n");};
};
class B : public A
{
public:
 B(){TRACE("B()/n");};
 ~B(){TRACE("~B()/n");};
};
void CEgDlg::OnButton1()
{
 A * p = (A*)new B() ;
 delete p ; 
}

运行结果如下:

A()
B()
~A()
相关文章
|
6月前
|
C++
面试题:基类的析构函数为何要声明为虚函数?
面试题:基类的析构函数为何要声明为虚函数?
38 0
|
6月前
|
编译器 C++
C++程序中的派生类析构函数
C++程序中的派生类析构函数
29 2
|
编译器 C++
C++中虚继承时的构造函数
在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。 下面我们以菱形继承为例来演示构造函数的调用: #include <iostream> using namespace std; //虚基类A class A{ public: A(int a); protected: int m_a; }; A:
C++学习之-析构函数必须为虚函数吗?
今天讨论个比较有意思的话题:析构函数是不是必须要为虚函数? 先说答案: 析构函数可以是虚函数,也可以不是虚函数。
<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数
<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数
139 0
|
编译器 定位技术
在父类的构造函数中调用虚函数为什么不能实现多态
在父类的构造函数中调用虚函数为什么不能实现多态
112 0
【为什么】构造函数中可以调用虚函数吗?
【为什么】构造函数中可以调用虚函数吗?
派生类构造函数和析构函数详解
派生类构造函数和析构函数详解
131 0
|
编译器 C++
C++不要在构造或析构函数中调用虚函数
C++不要在构造或析构函数中调用虚函数
286 0
|
编译器
构造函数为什么一般不定义为虚函数?而析构函数一般写成虚函数的原因 ?
构造函数为什么一般不定义为虚函数?而析构函数一般写成虚函数的原因 ?
408 0