如何防止在 C++ 中创建对象

Posted

技术标签:

【中文标题】如何防止在 C++ 中创建对象【英文标题】:How to prevent the creation of an object in C++ 【发布时间】:2021-09-16 09:15:52 【问题描述】:

我正在学习如何制作类,我想阻止我的用户在不提供变量的情况下创建对象。问题是我不知道如何进行才能做到这一点。这是我的代码:

class KoalaNurse 
    public:
        int id; // the var that i need to provide in order to create a new object if it's not provided it wont create the object
        void giveDrug(std::string gato, SickKoala *patient) 
            patient->takeDrug(gato);
        
        ~KoalaNurse() 
            std::cout << "Nurse " << id << ": Finally some rest !" << std::endl;
        
;

求任何帮助!

【问题讨论】:

你需要了解构造函数 【参考方案1】:

您需要定义自己的构造函数,以便编译器不会创建默认构造函数。

KoalaNurse (int some_value)

 //your code
;

另一种选择是使用关键字delete 以防止创建默认构造函数:

KoalaNurse() = delete;

【讨论】:

哦,我知道我不知道构造函数是这样工作的! 我无法自动取款,我需要等待 5 分钟【参考方案2】:

在这种情况下,您希望提供用户定义的构造函数。

class KoalaNurse 
public:
    explicit KoalaNurse( int id )
        : id_ id 
     

private:
    int id_;
;

int main( ) 
    KoalaNurse nurse 10 ;

使用构造函数,为了实例化您的class,您必须提供id

【讨论】:

你真的可以用explicit 构造函数来做KoalaNurse nurse10; 吗?我以为你需要KoalaNurse nurse(10); @j6t 不,它按预期工作。这里的explicit ctor 只会阻止implicit 转换。因此,您将无法将 int 传递给采用 KoalaNurse 的函数并将其 implicitly 转换为 KoalaNurse

以上是关于如何防止在 C++ 中创建对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中的子类中创建父对象数组?

如何在 C++ 中创建类对象的向量?

在C++ 如何在堆中创建一个类的对象? 谢谢!

在 C++ 中创建动态对象的动态数组

c++ 和 OpenGl:如何从类中创建网格对象实例

如何在 C++ 中创建参数化对象数组?