构造函数有啥用? [关闭]

Posted

技术标签:

【中文标题】构造函数有啥用? [关闭]【英文标题】:What is the use of a constructor? [closed]构造函数有什么用? [关闭] 【发布时间】:2021-03-22 16:00:27 【问题描述】:

我没有完全理解构造函数的使用 例如:

class car

    public:
    string name;
    long int price;
    int mileage
    bool ownedByPlayer;
;

这里,我为什么要使用这样的构造函数,

class car

    public:
    string name;
    long int price;
    int mileage
    bool ownedByPlayer;
    car()
    
       ownedByPlayer = false;
   
;

如果我可以简单地定义变量ownedByPlayer 我已经声明它。喜欢:bool ownedByPlayer = false;?

【问题讨论】:

对于无参数构造函数没有太大区别,但您可以编写带参数的构造函数。例如,您可以编写一个构造函数car(string name, long price, int mileage, bool owned),将成员变量的值设置为传递给构造函数的值。 无用的构造函数有什么用? ...有时构造函数实际上需要做一些事情来构造一个对象 C++ 不允许你在 C++11 之前的类中执行 bool ownedByPlayer = false; 这能回答你的问题吗? Why we do need constructors?, Use of constructor in C++. 您是在问为什么这个类必须始终有一个构造函数,还是在问您是否需要自己编写该构造​​函数,或者编译器生成的默认构造函数是否足够好? 【参考方案1】:

在您的情况下,无需编写构造函数。实际上,建议不要编写只使用默认值初始化成员的构造函数。虽然正确的方法是使用成员初始化列表:

car() : ownedByPlayer(false) 

从 C++11 开始,您可以使用默认成员初始化器:

class car 
    // ...
    bool ownedByPlayer = false;
    // ...
;

有时构造函数实际上需要做一些事情。考虑一个 car 在构造后在某处注册自己,那么您的类可能如下所示:

class car

    public:
    string name;
    long int price;
    int mileage;
    car(string name,long int price, int mileage) : name(name),price(price),mileage(mileage) 
        CarRegistrationFacility::register_car(*this);
     
;

实际上,我发现很难为构造函数创建一个不只是初始化成员的示例,因为构造函数就是这样做的。但是,当您的构造函数做的不止这些时,那么“更多”就会发生在构造函数的主体中。

【讨论】:

当你记得你可以重载构造函数时,构造函数的使用会大大增加。 `std::vector 有大约 10 个构造函数。 @MooingDuck 好点,虽然我正处于删除它的边缘。如果问题没有关闭,也许我稍后会改进它 template <typename... NameArgs, typename... PriceArgs, typename... MileageArgs> car(std::piecewise_construct_t, std::tuple<NameArgs&&...> nameArgs, std::tuple<PriceArgs&&...> priceArgs, std::tuple<MileageArgs&&...> mileageArgs) 这样的东西,我承认对于这里定义的car 来说完全是矫枉过正?

以上是关于构造函数有啥用? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Java中私有构造函数有啥用?

js中函数的prototype.constructor是指向函数本身,它有啥用

javascript中的new有啥用

C语言中的class函数有啥用~

js中函数的prototype.constructor是指向函数本身,它有啥用

php中那个__set()魔术方法到底有啥用??有没有通俗一点的解释?