构造函数有啥用? [关闭]
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
来说完全是矫枉过正?以上是关于构造函数有啥用? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
js中函数的prototype.constructor是指向函数本身,它有啥用