C ++如何从具有一个参数的派生类构造函数调用具有两个参数的超类构造函数?

Shiladitya basu

例如,这:

class shape {
private:
    int height;
    int width;
public:
    shape(int h, int w) {
        height = h;
        width = w;
    }
    void display() {
        std::cout << height << "\t" << width << std::endl;
    }
};

class square : public shape {
public:
    square(int d) {
        shape(d, d);
    }
};

我收到以下错误消息:

no default constructor exists for class "shape"

为什么会这样呢?我知道它想要基类的默认构造函数,我想知道为什么要这样,并且如果我将square构造函数的语法更改为初始化列表,请参见square(int d): shape(d, d){}程序成功编译。有什么不同?

克劳斯

只需通过这样调用构造函数即可:

class square : public shape {
public:
    square(int d): shape(d, d)
    {
    }
};

重要的是在派生类的构造函数的主体之前调用构造函数。您还应该在构造函数主体之前初始化成员变量

如果您不这样做,将完成所有对象的默认初始化,然后第二步完成分配。在您的示例中,您首先尝试使用父类的默认初始化,这是不可能的,因为您没有默认构造函数。

有关此主题的更多信息,请参见:http : //en.cppreference.com/w/cpp/language/initializer_list

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从C ++ 17中的另一个构造函数调用具有不同参数类型的构造函数

如何在 C++ 中使用具有另一个类对象的构造函数?

具有一个默认参数和一个变量参数的C ++构造函数

具有默认参数的C ++基类构造函数

派生类是否可以具有不在C ++基类中的构造函数?

C ++中带有另一个模板类作为参数的构造函数

C++派生类的参数化构造函数

C ++-从另一个类构造函数调用一个类构造函数

C++ 两个派生类在其中具有彼此的对象(包括问题)

具有构造函数参数的C#新类,该构造函数引用正在创建该类的类

C ++如何使用具有超类指针的子类调用函数

调用另一个函数内具有参数类型的函数c#

如何调用在C ++中具有抽象基类和派生类的定义的基类的虚函数定义?

C#中一个构造函数内的两个构造函数调用

类模板构造函数可以在c ++ 20中具有冗余的模板参数列表吗

C ++可以将用作虚拟基础的类具有带参数的构造函数吗?

C ++基类构造函数,将派生类作为参数(?)

C++ 可以根据给单个构造函数的参数创建派生类而不是bass 类吗?

未调用派生类的c ++ / cli静态构造函数

我正在尝试创建一个使用C ++中的参数包构造函数的异常类

C#-创建一个其构造函数采用通用参数的类,导致转换异常

C ++-派生类构造函数的行为

如何创建一个接口以允许在 C++ 中构造不同的嵌套派生类?

如何在 C++ 中创建一个接受大括号中的参数的类构造函数?

在派生类 C++ 的构造函数中调用基类的构造函数

C ++派生类构造函数调用基类构造函数错误

C ++:用指向派生类的指针进行的虚函数调用是否仍具有vlookup

如何在C ++中从基类构造函数调用派生类方法?

C ++为什么基类/结构构造函数不能有多个参数可以从派生隐式调用?