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”?? * /
答案 0 :(得分:1)
它在B之前打印两次,因为:
最后,打印出A的复制构造函数,赋值操作和析构函数,因为foo()按值返回A的实例,因此需要将其复制到其目标中。
此外,您可能希望格式化并更好地提出您的问题,或者有人会对它们进行投票。