C++ c++;继承默认构造函数
为什么在打印“B ctor”之前先打印两次“A ctor” 为什么要在程序的末尾打印“一个复制ctor”、“一个op=”、“一个dctor”*/C++ c++;继承默认构造函数,c++,inheritance,default,C++,Inheritance,Default,为什么在打印“B ctor”之前先打印两次“A ctor” 为什么要在程序的末尾打印“一个复制ctor”、“一个op=”、“一个dctor”*/ 它在B之前打印A两次,因为: 第一次是因为B派生自A,所以它是基类的实例化 第二次是因为B包含A的一个实例作为成员变量。在调用B的构造函数之前,它也会被实例化 最后,会打印出的复制构造函数、赋值op和析构函数,因为foo()返回的是by值的实例,所以需要将其复制到目标中 另外,你可能想把你的问题编排得更好一些,或者有人会投反对票。眨眼标签到底在那里干什
它在B之前打印A两次,因为:
另外,你可能想把你的问题编排得更好一些,或者有人会投反对票。眨眼标签到底在那里干什么?关于主题,这个程序不编译,更不用说打印任何东西了。但这似乎是一个很容易回答的问题。
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