我在这里的预期输出是“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;
}
答案 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可以覆盖这些值。