【发布时间】:2017-07-05 21:27:47
【问题描述】:
我正在看一个虚函数行为的示例。鉴于此测试代码,我对其行为有几个问题。
class A
{
public:
A(int x)
{
cout << "In A Constructor" << endl;
print();
}
~A(){
cout << "In A Destructor" << endl;
delete _val;
}
virtual void print() { cout << "A." << endl; }
private:
char* _val;
};
class B: public A
{
public:
B(int x, int y) : A(x)
{
_dVal = new char[y];
cout << "In B Constructor 1" << endl;
print();
}
B() : A(0)
{
_dVal = new char[1];
cout << "In B Constructor 2" << endl;
print();
}
~B(){
cout << "In B Destructor" << endl;
delete _dVal;
}
void print() { cout << "B" << endl; }
private:
char* _dVal;
};
int main(int argc, char** argv) {
A* p1 = new B();
p1->print();
delete p1;
return 0;
}
输出是:
In A Constructor
A.
In B Constructor 2
B
B
In A Destructor
1) 如果类 A 是唯一一个将它表示为虚函数并且通过取消引用 (->) 调用的类 B,为什么要为类 B 调用 print? 2) 如果构造函数实际上被调用,为什么 B 的析构函数永远不会被调用?
【问题讨论】:
-
如果函数在基类中是虚函数,那么它在所有派生类中也是虚函数。析构函数也是如此。
-
每个问题一个问题。
标签: c++ constructor destructor virtual-functions