class A {
A() { }
};
class B : public A {
B() : A() { }
};
为什么我们需要在
B
的构造函数中显式地调用基类的构造函数?难道这不是隐式的吗?class A {
A() { }
};
class B : public A {
B() : A() { }
};
B
的构造函数中显式地调用基类的构造函数?难道这不是隐式的吗?这是隐式的。如果A有带参数的构造函数,那么你需要使用这种语法来传递参数。
这是隐式且不必要的。如果你没有显式地调用基类构造函数,就会使用默认构造函数(没有参数的构造函数)。
只有在基类没有默认构造函数或者你想调用不同于默认构造函数的构造函数时才需要显式调用构造函数。
为了清晰起见,仍然可以添加对基类构造函数的显式调用,但这并非必需。
只有在A类的构造函数需要额外的参数时才需要使用。在你的示例中,不需要显式调用基类的构造函数。
class A
{
private:
int m_i;
public:
A(int i)
: m_i(i)
{
}
};
class B:public A
{
public:
B()
{
}
};
这段代码无法工作(无法编译),因为 A
没有默认构造函数。在这种情况下,您必须使用适当的参数显式调用基类构造函数。
另一种需要显式调用构造函数的情况是基类有多个构造函数。在这种情况下,您可以显式调用合适的构造函数。
B():
中的冒号 :) - Matthieu M.