有一个基类:
class A {
public :
A(string a);
void some_method();
};
实施A:
A::A(string a) {
cout<<"here it is : "<<a;
}
void A::some_method() { ... }
有一个继承自A:
的类class B : A {
public :
B(string b);
void another_method();
};
B的实施:
B::B(string b):A(string a) // it causes error at compil time
{
cout<<"here it is : "<<b;
}
void B::another_method() { ... }
我应该在B的构造函数的实现中写什么?
答案 0 :(得分:2)
该行必须阅读
B::B(string b):A(b)
您可以通过将A构造函数视为调用而不是声明来记住这一点。
答案 1 :(得分:1)
那就是:
B::B(string b):A(b)
{
与普通对象初始化一样(初始化传递参数A
的基础子对象b
)。
答案 2 :(得分:1)
如果你有像B::B(string b):A(string a)
这样的构造函数,你期望构造函数的调用者如何传递参数? :-)
因此,如果您想使用b
初始化a
,可以执行此操作:B::B(string b):A(b)
。否则,您必须执行B::B(string a, string b):A(a)