0

我在这里的预期输出是“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;  
}
4

2 回答 2

1

事情完成的顺序:

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

所以调用顺序是

b(1)
d() -> which is cout fc, and then cout dvfunc

b() 永远不会被调用,所以它不会到达 bvfunc。b() 和 b(int i) 都是独立的构造函数,并且只会调用一个,而不是两者。

于 2013-02-24T09:52:37.997 回答
1

要获得所需的输出,您需要

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

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

于 2013-02-24T09:57:30.497 回答