【发布时间】:2013-04-28 09:39:33
【问题描述】:
我有两个类,而B 派生A。
我创建了一个指向A 的指针,称为:a2。请查看我的main 函数。
这条线有什么作用?
a2 = new B();
为什么我删除a2时,只激活了A的析构函数?
#include <iostream>
using namespace std;
class A {
int num;
public:
A() { cout << "constructor of A\n"; }
void set_num(int new_num) { cout << "set_num of A" << endl; num = new_num; }
void print() { cout << "print of A: "; cout << num << endl; }
~A() { cout << "destructor of A\n"; }
};
class B: public A {
int num;
public:
B() { cout << "constructor of B\n"; }
void set_num(int new_num) { cout << "set_num of B" << endl; num = new_num; }
void print() { cout << "print of B: "; cout << num << endl; }
~B() { cout << "destructor of B\n"; }
};
void main() {
A *a2;
a2 = new B();
delete a2;
}
这是输出:
constructor of A
constructor of B
destructor of A
感谢每一个帮助!
【问题讨论】:
-
如果您将
a2的类型从A *更改为B *(它的实际,最具体的类型),那么这将按预期工作。此外,main()必须返回int,并且不void。 -
@H2CO3,好的,非常感谢!
标签: pointers inheritance constructor destructor derived-class