一、下面初始值是错误的,请找出问题所在并尝试修改它。
struct X
{
X(int i,int j):base(i),rem(base%j){ }
int rem,base;
}
解析:
此类问题经常考察的知识点为:
知识点1:类内成员是const、引用时或者使用某种类类型没有默认构造函数的成员时必须将其初始化。
知识点2:初始化和赋值是不等价的。
知识点3:成员初始化的顺序一般是没有要求的,但是若用一个成员来初始化另一个成员是,就必须考虑到其定义时的顺序(写时保持顺序一直即可)。
答案为;此题出现了知识点3中的问题:用一个成员来初始化另一个成员,没有考虑顺序问题。
二、使用本节提供的Sales_data类,确定初始化下面的变量时分别使用了哪些构造函数,然后罗列出每个对象所有数据成员的值。
Sales_data first_item(cin);
int main()
{
Sales_data next;
Sales_data last("9-999-99999-9");
}
解析: 答案:第一个调用的是第三种构造函数;第二个调用的是默认的构造函数(默认参数已经在237页的代码中设定);
第三种调用的是第一种构造参数。
本题目引申出来的知识点为:构造函数的特点(1)构造函数的名子必须和类名相同,不能任意命名; (2) 构造函数没有返回值; (3)构造函数可以被重载,但是每次对象创建时只会调用其中的一个。
我们需要注意的是:可以将构造总结为以下几类,不同入参决定调用不同的构造函数,它们分别是**普通构造函数** 、**默认构造函数** 、**拷贝构造函数** 、**转换构造函数**;分别学习一下以下构造函数。
1.普通构造函数
数普通构造函数是最为常见的构造函数,它没有特殊的特点,其函数形参参数可有多个,其函数原型和测试代码如下:
//普通构造函数原型
CComplex(int nReal, int nImag);
//测试代码
//需要指定参数
CComplex num1(1,1);
num1.PrintComplex();
2. 默认构造函数
相对于普通构造函数而言,默认构造函数是指用户可以指定实参值,也可以不指定实参值,不指定实参值,系统就使用默认的值,
而且默认构造函数只可以有一个,否则有歧义;默认构造函数原型和测试代码如下:
//默认构造函原型声明
CComplex(); //默认构造函数形式1,这里选择形式1
CComp