【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

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

相关推荐
怎么没有名字注册了啊42 分钟前
查找成绩(数组实现)
c++·算法
AI+程序员在路上2 小时前
QT6中Combo Box与Combo BoxFont 功能及用法
c++·qt
L_09072 小时前
【Algorithm】Day-4
c++·算法·leetcode
煜3643 小时前
C++异常与智能指针
开发语言·c++
光头闪亮亮3 小时前
ZBar 环境搭建与快速入门指南
c++
闭着眼睛学算法3 小时前
【双机位A卷】华为OD笔试之【模拟】双机位A-新学校选址【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
java·c语言·javascript·c++·python·算法·华为od
卿摆摆3 小时前
【C++】string的模拟实现
开发语言·c++
玫瑰花店4 小时前
C++速通Lambda表达式
开发语言·c++
CoderCodingNo4 小时前
【GESP】C++五级考试大纲知识点梳理, (3-4) 链表-双向循环链表
开发语言·c++·链表
colus_SEU5 小时前
【编译原理笔记】2.1 Programming Language Basics
c++·算法·编译原理