【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

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

相关推荐
葱卤山猪30 分钟前
C++17 联合体
开发语言·c++
不会C语言的男孩44 分钟前
C++ Primer Plus 第9章:内存模型和名称空间
开发语言·c++
愿天垂怜1 小时前
【C++脚手架】gtest 单元测试库的介绍与使用
linux·服务器·c++·gitee·前端框架·gtest
小欣加油1 小时前
leetcode 3300 替换为数位和后的最小元素
数据结构·c++·算法·leetcode
晚风予卿云月1 小时前
【枚举】普通枚举
数据结构·c++·算法·竞赛·算法随笔
MR.欻1 小时前
ZLMediaKit 源码分析(四):RTP/RTCP 协议栈实现分析
c++·人工智能·vscode·ffmpeg·音视频
郝学胜-神的一滴1 小时前
Qt 高级开发 019:从零定制登录窗口按钮、Logo 样式与交互悬浮效果
开发语言·c++·qt·程序人生·交互·用户界面
YikNjy1 小时前
string(c++)
java·服务器·c++
汉克老师1 小时前
GESP6级C++考试语法知识(三十四、二叉搜索树(BST)(四、BST的退化))
c++·二叉搜索树·bst·gesp6级·gesp六级
y_m_h1 小时前
llvm介绍
c++