是否有可能使子类的构造函数签名与其父级的构造函数签名不同?

时间:2014-12-09 07:31:05

标签: c++

有一个基类:

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(bool b);
void another_method();
};

B的实施:

B::B(string b):A(/*what to write here*/)
{
cout<<"here it is : "<<b;
}
void B::another_method() { ... }

是否有可能造成这种情况? B是否有可能在其构造函数中有一个布尔参数,而它的父元素的构造函数param有一个字符串参数?

2 个答案:

答案 0 :(得分:3)

是的,完全没问题。从子构造函数向父构造函数传递参数是 必须的,并且您可以从子类传递所有,一些,无参数,并在需要时添加更多构造函数参数。 / p>

B::B(bool b) : A("Parent")
{
  cout<<"here it is : "<<b;
}

答案 1 :(得分:2)

是的,你可以。您必须使用正确的签名正确调用父构造函数,但您的子构造函数可以拥有自己完全不同的签名。

B::B(bool b):A(string())
{
    cout<<"here it is : "<<b;
}

以上原因导致A的构造函数以空字符串作为参数执行,然后B的构造函数以bool b作为参数执行。