You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中无子类构造函数时如何向基类构造函数传参?

解决方案

方案1:使用继承构造函数(C++11及以上)

如果你希望子类能接受int参数并传递给基类,但不想手动编写参数化构造函数,可以让子类继承基类的构造函数。只需在子类中添加using parent::parent;,这样编译器会自动生成与基类构造函数签名匹配的子类构造函数,无需手动实现。

修改后的代码:

#include<iostream>
using namespace std;
class parent{
public:
    parent(int number){
        cout<<"Value of the number from parent class is: "<<number<<endl;
    }
};
class child: public parent{
public:
    using parent::parent; // 继承基类的构造函数
    child(): parent(10){} // 保留原有的无参构造
};
int main()
{
    child ob(100); // 现在可以正常调用,参数100会传递给基类构造
    child ob2; // 也可以调用无参构造,基类接收10
    return 0;
}

这样既不用手动编写子类的参数化构造,又能实现向基类传递参数的需求,同时支持两种对象创建方式。

方案2:修正main函数的对象创建方式

如果main中传入100是误操作,你原本只想创建子类的无参对象,那么直接将child ob(100);改为child ob;即可。此时子类的无参构造会调用基类的parent(10),代码可以正常运行:

修改后的main函数:

int main()
{
    child ob; // 无参创建对象,基类接收参数10
    return 0;
}

补充说明

因为基类只定义了带int参数的构造函数,编译器不会为基类生成默认构造函数。所以子类的任何构造函数都必须显式指定要调用的基类构造函数。如果不想手动编写子类的参数化构造,继承构造函数是最简洁的方式,它能让子类自动拥有与基类一致的构造函数签名,同时保留你自定义的无参构造。

内容的提问来源于stack exchange,提问作者Alamgir Hossain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 18:40:58