c++ - 调用基类构造函数的规则是什么?

标签 c++ inheritance constructor

从派生类调用基类构造函数的 C++ 规则是什么?

例如,我知道在 Java 中,您必须将其作为子类构造函数的第一行(如果不这样做,则假定隐式调用无参数 super 构造函数 - 如果出现编译错误,则会出现编译错误不见了)。

最佳答案

如果没有参数,则会自动为您调用基类构造函数。如果要调用带参数的父类(super class)构造函数,则必须使用子类的构造函数初始化列表。与 Java 不同,C++ 支持多重继承(无论好坏),因此必须通过名称引用基类,而不是“super()”。

class SuperClass
{
    public:

        SuperClass(int foo)
        {
            // do something with foo
        }
};

class SubClass : public SuperClass
{
    public:

        SubClass(int foo, int bar)
        : SuperClass(foo)    // Call the superclass constructor in the subclass' initialization list.
        {
            // do something with bar
        }
};

更多关于构造函数初始化列表的信息herehere .

关于c++ - 调用基类构造函数的规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/120876/

相关文章:

c++ - 使用以前未知的模板存储通用对象

java - 确保方法被调用

c++ - 使用对 const 结构的 const 数组的引用进行构造

c++ - 可变参数构造函数中的 SFINAE

c# - 有没有一种方法允许子类只覆盖 -some- 父类抽象方法

c++ - 在头类构造函数中使用嵌套类

c++ - cuda统一内存泄漏

c++ - 视觉 C++ RECT 碰撞

c++ - 使用 gcc 编译时区分大小写导致错误

c++ - 使用析构函数时清除成员变量