【发布时间】:2014-06-16 19:49:45
【问题描述】:
class A{
public:
A(){ cout << “A ctor” << endl; }//default A constructor
A(const A& a){ cout <<“A copy ctor”<< endl; }//copy constructor
virtual ~A(){ cout <<“A dtor”<< endl; }//destructor
virtual void foo(){ cout <<”A foo()” << endl; }
virtual A& operator=(const A& rhs){ cout << “A op=” << endl; }//operator
};
class B:public A{
public:
B(){ cout <<“B ctor”<< endl; }//default B constructor
virtual ~B(){ cout <<”B dtor”<< endl; }//destructor
virtual void foo(){ cout <<”B foo()”<< endl; }
protected:
A mInstanceOfA;
};
A foo(A& input){
input.foo();
return input;
}
Int main(){
B myB;
B myOtherB;
A myA;
myOtherB=myB;
myA=foo(myOtherB);
}
这个程序打印:
A ctor
A ctor
B ctor
A ctor
A ctor
B ctor
A ctor
A op=
A op=
B foo()
A copy ctor
A op=
A dctor
为什么在打印“B ctor”之前打印 2 次“A ctor” 以及为什么要在程序“A copy ctor”、“A op="、“A dctor”的末尾打印??*/
【问题讨论】:
-
blink 标签到底在里面做什么?在主题上,这个程序不能编译,更不用说打印任何东西了。但看起来book 很容易回答。
标签: c++ inheritance default