【发布时间】:2014-05-21 18:57:47
【问题描述】:
我正在尝试找出 C++ 中类继承的技巧,并且我已经构建了一个示例项目:
#include "stdafx.h"
#include <iostream>
using namespace std;
class A
{
public:
A()
{
cout << "Class A initialized" << endl;
}
~A()
{
cout << "Class A destructed" << endl;
}
};
class B : public A
{
public:
B()
{
cout << "Class B initialized" << endl;
}
~B()
{
cout << "Class B destructed" << endl;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
cout << "A* a = new A()" << endl;
A* a = new A();
cout << "B* b = new B ()" << endl;
B* b = new B ();
cout << "A* ab = new B()" << endl;
A* ab = new B();
cout << "delete a" << endl;
delete a;
cout << "delete b" << endl;
delete b;
cout << "delete ab" << endl;
delete ab;
int i;
cin >> i;
return 0;
}
我得到的输出是:
A* a = new A()
Class A initialized
B* b = new B ()
Class A initialized
Class B initialized
A* ab = new B()
Class A initialized
Class B initialized
delete a
Class A destructed
delete b
Class B destructed
Class A destructed
delete ab
Class A destructed
我可以将 B 类的行为理解为派生类——首先它构造基类,然后构造派生类。当它调用析构函数时,它以相反的方式完成工作。似乎合乎逻辑。
我无法理解的是 ab 的行为(我将 B 分配到 A 指针中), 为什么构造函数和纯B一样,而析构函数只在A上运行?
谢谢。
【问题讨论】:
-
因为你还没有制作
A的析构函数virtual。 -
你是对的。我的错。谢谢。
标签: c++ inheritance