如何在C++中禁止用户不提供指定参数就创建类对象
C++强制类创建时传入指定参数的实现方法
你需要的核心是禁用无参默认构造函数,仅保留接收必填参数的构造函数即可实现要求,修改后的代码如下:
class KoalaNurse { public: int id; // 创建新对象时必须提供的变量,未提供则不允许创建对象 // 显式禁用无参默认构造,代码可读性更高 KoalaNurse() = delete; // 仅保留接收id参数的构造函数,创建对象时必须传入int类型的id explicit KoalaNurse(int input_id) : id(input_id) {} void giveDrug(std::string gato, SickKoala *patient) { patient->takeDrug(gato); } ~KoalaNurse() { std::cout << "Nurse " << id << ": Finally some rest !" << std::endl; } };
关键说明
- 当你显式定义了任意构造函数后,C++编译器不会再自动生成无参默认构造函数,用户如果尝试不传入参数创建对象,编译阶段就会直接报错。
- 使用
explicit修饰构造函数,可以避免int类型被隐式转换为KoalaNurse对象,减少隐式转换带来的潜在bug。 - 额外加
KoalaNurse() = delete;属于可选的优化写法,能直接明确地告诉其他开发者该类不允许无参构造,代码可读性更强。
用法示例
// 合法用法,必须传入id参数创建对象 KoalaNurse valid_nurse(1001); valid_nurse.id; // 值为1001 // 非法用法,编译会报错 // KoalaNurse invalid_nurse; // 无参构造已被禁用 // KoalaNurse invalid_nurse2 = 1002; // explicit禁止隐式转换,报错
内容的提问来源于stack exchange,提问作者Tsirsuna
相关产品推荐
相关产品推荐

