下面程序的执行结果是什么?为什么?

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

你最好自己上机测试一下,这样更能加深印象。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网