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

最佳答案

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

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


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

10-04 14:14
查看更多