C++继承默认构造函数[关闭]

Posted

技术标签:

【中文标题】C++继承默认构造函数[关闭]【英文标题】:c++ inheritance default constructor [closed] 【发布时间】: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 很容易回答。 【参考方案1】:

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

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

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

此外,您可能希望更好地格式化并提出您的问题,否则有人会否决它们。

【讨论】:

以上是关于C++继承默认构造函数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

具有非默认构造函数的 C++ 继承

类 x(继承)C++ 不存在默认构造函数

C++ 构造函数的默认参数[关闭]

继承默认构造函数,矛盾吗?

C++提高:继承

C++提高:继承