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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:54:00