c++继承默认构造函数

c++ inheritance default constructor

本文关键字:构造函数 默认 继承 c++      更新时间:2023-10-16

  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 "前打印2次"A "为什么在程序末尾打印"A copy tor","A op=","A tor"??*/

在B之前打印A两次,因为:

  1. 第一次是因为B派生自A,所以它是基类
  2. 的实例化
  3. 第二次是因为B 包含 A的实例作为成员变量。因此,在调用B的构造函数之前,它也被实例化了。

最后,输出A的复制构造函数、赋值操作op和析构函数,因为foo()按值返回A的实例,因此需要将其复制到目的地。

另外,你可能想把你的问题的格式和问得更好一点,否则有人会反对你的问题。