首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用初始化列表调用构造函数?

如何使用初始化列表调用构造函数?
EN

Stack Overflow用户
提问于 2022-06-21 21:05:23
回答 1查看 73关注 0票数 1

你好,我对C++相当陌生,我希望使用初始化列表从Square构造函数中调用Rectangle构造函数,以便为正方形的sideAsideB分配值。如有任何建议,将不胜感激。

代码语言:javascript
运行
复制
class Rectangle
{
public:
    Rectangle (int a, int b);

    // ...

public:
    int sideA;
    int sideB;
};

Rectangle::Rectangle (int a, int b) {
    sideA = a;
    sideB = b;

    if (a < 1)
        sideA = 1;
    if (b < 1)
        sideB = 1;
}

class Square: public Rectangle
{
public:
    Square(int); //constructor
    void setSideA(int);
    void setSideB(int);
};

Square::Square (int a) {
    sideA = a;
    sideB = a;
}

void Square::setSideA(int a) {
    sideA = a;
    sideB = a;
    if (a < 1)
        sideA = 1;
        sideB = 1;
}

void Square::setSideB(int b) {
    sideA = b;
    sideB = b;
    if (b < 1)
        sideA = 1;
        sideB = 1;
}
EN

回答 1

Stack Overflow用户

发布于 2022-06-21 21:15:46

可以在派生类(Square)构造函数的初始化器列表部分调用基类(Square)构造函数,从而以与初始化数据成员相同的方式初始化派生类的“基本组件”(如下面代码中Rectangle构造函数的初始化程序列表所示):

代码语言:javascript
运行
复制
class Rectangle {
private:
    int sideA, sideB;
public:
    Rectangle(int a, int b) : sideA{ std::max(1,a) }, sideB{ std::max(1,b) } {} // Initialize data
    //...
};

class Square : public Rectangle {
public:
    Square(int s) : Rectangle{ s, s } {} // 'Initializer list' calls base class c'tor
    //...
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72707116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档