【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

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

相关推荐
持梦远方23 分钟前
【C++日志库】启程者团队开源:轻量级高性能VoyLog日志库完全指南
开发语言·c++·visual studio
许长安1 小时前
C++中指针和引用的区别
c++·经验分享·笔记
hetao17338371 小时前
2025-10-30 ZYZOJ Star(斯达)模拟赛 hetao1733837的record
c++·算法
lingran__2 小时前
算法沉淀第十一天(序列异或)
c++·算法
一匹电信狗2 小时前
【C++】红黑树详解(2w字详解)
服务器·c++·算法·leetcode·小程序·stl·visual studio
散峰而望2 小时前
Dev-C++一些问题的处理
c语言·开发语言·数据库·c++·编辑器
进击的大海贼3 小时前
QT/C++ 消息定时管理器
开发语言·c++·qt
kyle~3 小时前
原子性与原子操作
运维·服务器·开发语言·c++
第七序章3 小时前
【C + +】C++11 (下) | 类新功能 + STL 变化 + 包装器全解析
c语言·数据结构·c++·人工智能·哈希算法·1024程序员节
AA陈超3 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-29 属性信息委托
c++·游戏·ue5·游戏引擎·虚幻