class A {
A() { }
};
class B : public A {
B() : A() { }
};
为什么我们需要在B
的构造函数中显式调用基类的构造函数?不隐含吗?
答案 0 :(得分:11)
这是隐含的。如果A有一个带参数的构造函数,你需要这种语法,这是传递它们的方法。
答案 1 :(得分:8)
这是隐含的和不必要的。如果没有显式调用基类构造函数,则使用默认构造函数(没有参数的构造函数)。
如果基类没有默认构造函数,或者如果要调用与默认构造函数不同的构造函数,则只需要显式调用构造函数。
为了清楚起见,仍然可以添加对基类构造函数的显式调用,但这不是必需的。
答案 2 :(得分:2)
只有在A的构造函数需要额外参数的情况下才需要这样做。在您的示例中,没有必要显式调用基类的构造函数。
答案 3 :(得分:0)
如果您已经展示过,则没有必要。请考虑以下事项:
class A
{
private:
int m_i;
public:
A(int i)
: m_i(i)
{
}
};
class B:public A
{
public:
B()
{
}
};
这不起作用(不会编译),因为A
不再有默认构造函数。在这种情况下,您必须使用适当的参数显式调用基类构造函数。
另一次,您可能必须显式调用构造函数是基类有多个构造函数。在这种情况下,您可以明确地调用有意义的那个。