为什么我输出'b(1)dc dvfunc'?

时间:2013-02-24 09:48:17

标签: c++

我在这里的预期输出是“bc bvfunc b(1)dc dvfunc”,但我得到的输出如“b(1)dc dvfunc”为什么会这样?有人可以帮帮我吗?谢谢你宝贵的时间!

#include<iostream>

using namespace std; 

class b {
 public:
  b() {
    cout<<" bc ";
    b::vfunc();
  }
  virtual void vfunc(){ cout<<" bvfunc "; }
  b(int i){ cout<<" b(1) "; }
};

class d : public b {
public:
  d(): b(1) {
    cout<<" dc ";
    d::vfunc();
  }
  void vfunc(){ cout<<" dvfunc"; }
};

main()
{
  d d;  
}

2 个答案:

答案 0 :(得分:1)

完成任务的顺序:

d()被调用。这将调用b(1),然后调用构造函数的其余部分。

所以电话订单是

b(1)
d() -> which is cout fc, and then cout dvfunc
永远不会调用

b(),因此它不会到达bvfunc。 b()和b(int i)都是独立的构造函数,只调用一个,而不是两个。

答案 1 :(得分:1)

要获得所需的输出

d(){b(1);      //move b(1) from initializer list and put it in a constructor.  
    cout<<" dc ";

在构造函数调用默认值之前,FYI initializer list用于initialize类的成员.Constructor可以覆盖这些值。