对象的初始化
每一个对象都应该在建立之时就有确定的内容,否则就失去了对象的意义了。定义一个对象,在系统为其分配内存时,应该同时对有关的数据成员赋初始值。首先,不能在类声明中对数据成员初始化。因为类不是实体,而是抽象类型,不占用内存而无处容纳数据。
一般初始化方法
- 如果类中所有数据成员为公用的,可以在定义对象时赋初值。
如果类中数据为私有或受保护的,则不能在定义对象时赋初值。
Time t1 = { 20,20,20 };
- 用成员函数对数据成员赋初值。但是如果定义的对象多,数据多,那么程序会变得非常臃肿。
- 可以用一个类对象初始化另一个类对象 Time t1 = t2;
用构造函数实现数据成员的初始化
- 构造函数是一种特殊的成员函数,不需要也不能被用户调用。
- 名字与类名同名,无返回值,无类型,故定义时不需要指定数据类型;
- 在建立类对象时会自动调用,只需在定义对象时同时指定初值;
- 唯一作用是对对象进行初始化,故不提倡加入无关初始化的内容;
- 若用户没有定义构造函数,系统会自动生成,空的无参数无操作。
Time()
{ hour = 0;
minute = 0;
second = 0;}
带参数的构造函数
上述在定义构造函数时,在函数体内对数据赋值,则每一个对象都会得到同一组值。 若想实现对不同对象赋予不同初值,可以用带参数的构造函数。
由于用户无法调用构造函数,故实参是在定义对象时给出的。
Box(int int int); //构造函数原型声明
Box :: Box(int h,int w,int l){ } //类外定义带参数的构造函数
Box box1(13,14,52); //定义对象同时传递实参