【C++】父类参数有默认值时子类构造函数列表中可以省略该参数

在 C++ 中,如果你在基类的构造函数中为某个中间参数提供了默认值,并且你想在派生类的构造函数中调用这个基类的构造函数时使用该默认值,你可以省略显式传递该参数。你只需要确保其他必需的参数正确传递即可。

假设基类 Base 的构造函数定义如下:

cpp 复制代码
class Base : public QObject {
    Q_OBJECT
public:
    int value1;
    int value2; // 提供默认值 50
    int value3;

    Base(int val1, int val2 = 50, int val3) : value1(val1), value2(val2), value3(val3) {
        qDebug() << "Base constructor with values:" << value1 << value2 << value3;
    }

    virtual ~Base() {}
};

在派生类 Derived 中,你可以省略传递默认值的参数,并让编译器使用基类构造函数中的默认值:

示例代码

cpp 复制代码
class Derived : public Base {
    Q_OBJECT
public:
    // 子类构造函数只传递第一个和第三个参数,并利用基类的默认值
    explicit Derived(int val1, int val3) : Base(val1, val3) { 
        qDebug() << "Derived constructor with values:" << value1 << value2;
    }

    virtual ~Derived() {}
};

解释

  • 基类 Base

    • 构造函数定义为 Base(int val1, int val2 = 50, int val3),其中第二个参数 val2 提供了默认值 50
  • 子类 Derived

    • 子类构造函数只传递第一个和第三个参数,并在调用基类构造函数时省略中间的参数,默认使用 50

使用示例

cpp 复制代码
#include <QCoreApplication>
#include "base.h"
#include "derived.h"

int main(int argc, char *argv[]) {
    QCoreApplication app(argc, argv);

    Derived derivedInstance(10, 30); // 只传递第一个和第三个参数

    qDebug() << "Derived instance values:" << derivedInstance.value1 << derivedInstance.value2 << derivedInstance.value3;

    return app.exec();
}

输出结果

cpp 复制代码
Base constructor with values: 10 50 30
Derived constructor with values: 10 50
Derived instance values: 10 50 30

总结

  • 基类构造函数 :定义为 Base(int val1, int val2 = 50, int val3),其中第二个参数提供了默认值。
  • 子类构造函数 :只传递第一个和第三个参数,并在调用基类构造函数时省略中间的参数,默认使用 50

通过这种方式,你可以在派生类的构造函数中省略具有默认值的参数,并且可以显式地传递其他必需的参数。这提供了灵活性并简化了构造函数的调用。

相关推荐
羊小猪~~1 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
脉牛杂德2 小时前
多项式加法——C语言
数据结构·c++·算法
legend_jz2 小时前
STL--哈希
c++·算法·哈希算法
Vanranrr2 小时前
C++ QT
java·c++·qt
鸿儒5173 小时前
C++ lambda 匿名函数
开发语言·c++
van叶~4 小时前
算法妙妙屋-------1.递归的深邃回响:二叉树的奇妙剪枝
c++·算法
knighthood20014 小时前
解决:ros进行gazebo仿真,rviz没有显示传感器数据
c++·ubuntu·ros
半盏茶香4 小时前
【C语言】分支和循环详解(下)猜数字游戏
c语言·开发语言·c++·算法·游戏
小堇不是码农4 小时前
在VScode中配置C_C++环境
c语言·c++·vscode