假设我定义了一个结构体:
typedef
struct number{
int areaCode;
int prefix;
int suffix;
} PhoneNumber;
当我创建这个结构体的一个实例时,如果我使用以下语法:
PhoneNumber homePhone = {858, 555, 1234};
它调用的是哪个构造函数?默认构造函数、拷贝构造函数还是根本没有调用任何构造函数,因为它没有调用“new”?
这个问题的真正目的是找出如何添加第四个字段。所以我想重新定义我的结构体为:
typedef
struct number{
int areaCode;
int prefix;
int suffix;
int extension; // NEW FIELD INTRODUCED
} PhoneNumber;
现在,我可以使用四个字段创建新的PhoneNumber对象:
PhoneNumber officePhone = {858, 555, 6789, 777}
然而,我已经创建了数百个这些PhoneNumber实例,只有3个字段(xxx,xxx,xxxx)。因此,我不想遍历并修改已经定义的每个PhoneNumber对象的每个实例。我想能够保留它们,但仍然能够创建具有四个字段的新电话号码实例。因此,我正在尝试找出如何重写构造函数,以便我的现有三参数实例化不会出错,但它也将支持我的新四参数实例化。当我尝试定义一个覆盖默认构造函数的函数,该函数需要3个字段,并将第四个字段设置为默认值“0”时,我会得到错误(在代码的实例化部分,而不是构造函数定义中)。异常指出我的对象必须通过构造函数来初始化,而不是通过{...}。因此,如果我确实覆盖默认构造函数,那么我将无法使用花括号创建新对象?
抱歉,如果这远离了原始问题,请见谅。