C++是否可以定义多个参数列表完全相同的构造函数?
问题解答
你不能在C++中创建多个参数列表完全相同的构造函数,核心原因如下:
- C++的函数重载规则要求,重载的函数必须在参数的数量、类型或者顺序上存在差异,编译器仅通过参数列表区分要调用的重载函数,两个参数完全一致的构造函数会让编译器在实例化类时无法判断调用目标,编译阶段就会直接报错。
- 你写的第二个
hospital patientBilly()不属于构造函数:构造函数的命名要求是必须和类名完全一致,不允许自定义其他名称,这个写法本质上是一个返回值为hospital类型的普通成员函数,不具备构造函数的作用。 - 额外提示:你原本的示例代码中构造函数没有加
public修饰符,C++类的成员默认访问权限是private,会导致类外无法调用构造函数实例化对象,需要把构造函数放到public区域。
替代实现方案
如果你想要快速创建带有不同默认属性的类实例,可以参考以下两种常用实现方式:
方案1:使用带参数的构造函数
直接给构造函数添加参数,实例化时传入对应的值即可,也可以设置默认参数适配通用场景:
#include <string> using namespace std; class hospital { public: // 带参数的构造函数,设置默认值适配不需要传参的场景 hospital(string n = "John", int a = 24):name(n), age(a) {} private: string name; int age; }; // 实例化示例 hospital john; // 用默认值,姓名John,年龄24 hospital billy("Billy", 32); // 传入自定义值,姓名Billy,年龄32
方案2:使用静态工厂方法
如果确实需要固定的几种默认实例创建方式,可以用静态成员函数封装,和你原本想实现的命名逻辑完全匹配:
#include <string> using namespace std; class hospital { public: // 通用构造函数 hospital(string n, int a):name(n), age(a) {} // 静态工厂方法,创建不同默认值的实例 static hospital createJohn() { return hospital("John", 24); } static hospital createBilly() { return hospital("Billy", 32); } private: string name; int age; }; // 实例化示例 auto john = hospital::createJohn(); auto billy = hospital::createBilly();
内容的提问来源于stack exchange,提问作者Conner Smith
相关产品推荐
相关产品推荐

