6.2 对象的定义
1对象的定义
对象是类的实例,一个对象必须属于一个已知的类。因此在定义对象之前,必须先定义该对象所属的类。
对象的定义格式如下:
<类名><对象名>(<参数表>);
其中,<类名>是待定义的对象所属的类的名字。<对象名>中可以有一个或多个对象名,多个对象名之间用逗号分隔。<对象名>中,可以是一般的对象名,也可以是指向对象的指针名或引用名,还可以是对象数组名。<参数表>是初始化对象时需要的,建立对象时可以根据给定的参数调用相应的构造函数对对象进行初始化。无参数时表示调用类的缺省构造函数。
2对象的成员
一个对象的成员就是该对象的类所定义的成员,包括数据成员和成员函数。定义了对象后,可以使用“ .”运算符和“->”运算符访问对象的成员。其中,“ .”运算符适用于一般对象和引用对象,而“->”运算符适用于指针对象(即指向对象的指针)。访问对象成员的一般格式如下:
<对象名> .<数据成员名>或<对象名>-><数据成员名>
<对象名> .<成员函数名>(<参数表>)或<对象名>-><成员函数名>(<参数表>)
6.3 构造函数和析构函数
1构造函数和析构函数的定义。构造函数的作用是在对象被创建时利用特定的值构造对象,将对象初始化为一种特定的状态,使该对象具有区别于其他对象的特征。构造函数在对象被创建的时候由系统自动调用。
构造函数也是类的成员函数,但它是一种特殊的成员函数,它除了具有一般成员函数的特性之外,还具有一些特殊的性质:
(1)构造函数的名字必须与类名相同;
(2)构造函数不指定返回类型,它隐含有返回值,由系统内部使用;
(3)构造函数可以有一个或多个参数,因此构造函数可以重载;
(4)在创建对象时,系统会自动调用构造函数。
2缺省构造函数和缺省析构函数
缺省构造函数就是调用时不必提供参数的构造函数。缺省的构造函数的函数名与类名相同,它的参数表或者为空,或者它的所有参数都具有默认值。前面日期类Date的定义中,构造函数Date(int y=2000);就是缺省构造函数。
如果类中定义了一个缺省构造函数,则使用该函数;如果一个类中没有定义任何构造函数,编译器将生成一个不带参数的公有缺省构造函数,它的定义格式如下:
<类名>::<类名>()
{
}
每个类都必须有一个析构函数。如果一个类没有声明析构函数,编译器将生成一个公有的析构函数,即缺省析构函数,它的定义格式如下:
<类名>::~<类名>()
{
}
3拷贝构造函数
类中有一种特殊的构造函数叫做拷贝构造函数,它用一个已知的对象初始化一个正在创建的同类对象。拷贝构造函数的一般格式如下:
<类名>::<类名>(const<类名>&<引用对象名>)
{
//拷贝构造函数体
}
拷贝构造函数具有以下特点:
(1)也是一种构造函数,因此函数名与类名相同,并且不能指定函数返顺类型。
(2)只有一个参数,是对同类的某个对象的引用。
(3)每一个类中都必须有一个拷贝构造函数。如果类中没有声明拷贝构造函数,编译器会自动生成一个具有上述形式的公有的拷贝构造函数。
编辑推荐:
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |