如何实现子类的构造函数?

how to implement a subclass's constructor?

本文关键字:子类 构造函数 实现 何实现      更新时间:2023-10-16

有一个基类:

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 的构造函数的实现中我应该写什么?

该行必须读取

B::B(string b):A(b)

您可以通过将 A 构造函数视为调用而不是声明来记住这一点。

那很简单:

B::B(string b):A(b) 
{

就像普通的对象初始化一样(A将参数传递给b来初始化基本子对象)。

如果你

有一个像B::B(string b):A(string a)这样的构造函数,你期望构造函数的调用者如何传递参数?:-)

所以如果你想用b来初始化a,你可以这样做:B::B(string b):A(b)。否则,你必须做B::B(string a, string b):A(a)