显式调用基类构造函数的重要性是什么?

时间:2010-02-22 14:52:38

标签: c++

class A {
    A() { }
};

class B : public A {
    B() : A() { }
};

为什么我们需要在B的构造函数中显式调用基类的构造函数?不隐含吗?

4 个答案:

答案 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不再有默认构造函数。在这种情况下,您必须使用适当的参数显式调用基类构造函数。

另一次,您可能必须显式调用构造函数是基类有多个构造函数。在这种情况下,您可以明确地调用有意义的那个。