class base
{
public:
base(){fc();};
virtual void fc(){ cout<<"In class base"<<endl;}
virtual ~base() =0 { cout<<"Destructing base object"<<endl;}
};
class A: public base
{
public:
A(){ fc();};
void f() { fc();};
~A() { fd();};
void fd(){ };
};
class B: public A
{
public:
B(){};
void fc(){ cout<<"In class B"<<endl;}
~B() { fd();}
void fd(){ cout<<" Destructing B object"<<endl;}
};
void main()
{
B b;
b.fc();
base *p=new A;
p->fc();
delete p;
}
B b; 输出In class base (先调用基类构造函数),然后输出In class base(派生类A的构造函数),而B的构造函数没有额外输出。
b.fc(); 输出In class B
base *p=new A; 输出In class base (先调用基类构造函数),然后输出In class base(派生类A的构造函数)
p->fc(); 输出In class base(派生类的输出),因子类A没有覆盖基类的fc() [我不确定是否笔误为f()]
delete p; 因A析构没有做事,输出Destructing base object(基类的析构函数)
程序结束: 输出Destructing B object,然后输出Destructing base object追问
class BC {
public:
BC( ) { cout << "BC' constructor\n"; }
~BC( ) { cout << "BC' destructor\n"; }
};
class DC : public BC {
public:
DC( ) { cout << "DC' constructor\n"; }
~DC( ) { cout << "DC' destructor\n"; }
};
int main( ) {
DC d;
return 0;
}
帮忙看下这个 程序的执行结果是什么?为什么?
BC' constructor\n
DC' constructor\n
DC' destructor\n
BC' destructor\n
你最好自己上机测试一下,这样更能加深印象。