【发布时间】:2016-08-08 15:12:58
【问题描述】:
我有一个 C++ 类,比如“客户”,我希望有一个成员作为 ID,
private:
const string x; // Customer's ID
现在普通的构造函数看起来像这样:
Customer::Customer(const string& ID): x(ID){}
现在,我想构建一个默认构造函数,而不初始化 x。可能吗?因为如果我将它初始化为某个随机值,比如说“无标题”,那么我就不能再更改它了,因为它是一个 const。
所以我应该根本不构建一个默认构造函数,还是有可能构建一个不初始化 x 的构造函数,你可以稍后再做?
【问题讨论】:
-
所有 const 成员必须在构造函数中初始化。你可以做
Customer() : x("Some default String") { }但我不知道这是否是你需要的。如果你以后真的需要修改它,你就不能让它const。另一个危险选项是使用const_cast -
需求冲突意味着当前的设计方向不好。您想通过引入默认构造函数来解决什么问题?默认构造函数通常用于声明和稍后更改对象,但您不能有意义地复制分配具有
const数据成员的类。 -
如果你想要的是一个“可以稍后修改的 const 成员”,你并不真正想要一个 const 成员。
-
我在我的 OOP 课程中有一个练习,每个客户都应该有一个 ID,以后不能更改(不像她的手机或地址),所以它会产生很多感觉是 const。此外,我想成为一名“专业人士”,并且我理解手动定义默认 const 是一个好习惯,但这似乎与分配相矛盾。如果确实没有“合法”的方式将默认 ctor 分配给 const 成员,那么我可能不应该定义默认 ctor。
-
以后不修改,而是以后分配。
标签: c++ class constructor constants