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
相关产品推荐
相关产品推荐

