清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 第5章类和对象
第5章 类和对象(一)
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 51类的定义 1.类的定义格式 类的定义格式如下所示。 ∥说明部分 lass〈类名〉 public 〈成员说明 private: 〈成员说明
5.1 类的定义 1. 类的定义格式 类的定义格式如下所示。 //说明部分 class 〈类名〉 { public: 〈成员说明〉 private: 〈成员说明〉 }
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS ∥实现部分 类体内没有定义的成员函数在这部分进行定义。 其格式如下: 〈类型〉〈类名〉∷〈成员函数名〉(〈参数表〉) 〈函数体
//实现部分 类体内没有定义的成员函数在这部分进行定义。 其格式如下: 〈类型〉〈类名〉∷〈成员函数名〉(〈参数表〉) { 〈函数体〉 }
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 2.定义类时应注意的事项 (1)类体内应包含有数据成员和成员函数。通常成员函数定义 为公有成员,数据成员定义为私有成员 (2)类的成员的访问权限有3种:公有的( publie)、私有的 ( private)和保护的( protected (3)类中的私有成员类体外是不可访问的,体现了类的封装性 和隐藏性 (4)类中的成员函数定义在类体内为内联函数,定义在类体外 为外联函数。如果定义在类体外时前加关键字 inline则为内 联函数 (5)类体内的数据成员可以是各种不同类型的变量,也可以是 另一个类的对象,则称子对象
2. 定义类时应注意的事项 (1) 类体内应包含有数据成员和成员函数。通常成员函数定义 为公有成员,数据成员定义为私有成员 (2) 类的成员的访问权限有3种:公有的(publie)、私有的 (private)和保护的(protected) (3) 类中的私有成员类体外是不可访问的,体现了类的封装性 和隐藏性 (4) 类中的成员函数定义在类体内为内联函数,定义在类体外 为外联函数。如果定义在类体外时前加关键字inline则为内 联函数 (5) 类体内的数据成员可以是各种不同类型的变量,也可以是 另一个类的对象,则称子对象
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 52对象的定义 1.对象的定义格式 (1)一般对象的定义格式 〈类名〉〈对象名表〉; (2)指向对象的指针定义格式 〈类名〉*〈指针名〉 (3)对象引用的定义格式 〈类名〉&〈引用名〉=〈对象名〉;
5.2 对象的定义 1. 对象的定义格式 (1) 一般对象的定义格式 〈类名〉〈对象名表〉; (2) 指向对象的指针定义格式 〈类名〉*〈指针名〉; (3) 对象引用的定义格式 〈类名〉&〈引用名〉=〈对象名〉;
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 2.对象成员的表示方法 (1)一般对象成员表示方法 〈对象名〉.〈数据成员名〉 或〈对象名〉.〈成员函数名〉(〈参数表〉) (2)指向对象的指针成员表示方法 〈指针名〉→>〈数据成员名〉 或〈指针名〉->《成员函数名〉(〈参数表〉) (3)对象引用成员表示方法 (同对象) 参见[例51]、[例52]
2. 对象成员的表示方法 (1) 一般对象成员表示方法 〈对象名〉.〈数据成员名〉 或〈对象名〉.〈成员函数名〉(〈参数表〉) (2) 指向对象的指针成员表示方法 〈指针名〉->〈数据成员名〉 或〈指针名〉->〈成员函数名〉(〈参数表〉) (3) 对象引用成员表示方法 (同对象) 参见[例5.1]、[例5.2]
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 53对象的初始化 创建对象时,系统将自动调用相应的构造函数给对象初始化; 释放对象时,系统将自动调用析构函数释放该对象。 1.构造函数的功能和特点 (1)构造函数的功能是用来给所创建的对象进行初始化 2)构造函数的特点 ①构造函数的名字同类名。定义时无类型说明 ②构造函数是一个成员函数,可定义在类体内,也可定义在 类体外 ③构造函数可以有一个参数,也可有多个参数,还可以无参 数,并可以重载 ④构造函数被系统自动调用 ⑤当一个类中没有定义任何构造函数时,系统将自动创建 个默认构造函数
5.3 对象的初始化 创建对象时,系统将自动调用相应的构造函数给对象初始化; 释放对象时,系统将自动调用析构函数释放该对象。 1. 构造函数的功能和特点 (1) 构造函数的功能是用来给所创建的对象进行初始化 (2) 构造函数的特点 ① 构造函数的名字同类名。定义时无类型说明 ② 构造函数是一个成员函数,可定义在类体内,也可定义在 类体外 ③ 构造函数可以有一个参数,也可有多个参数,还可以无参 数,并可以重载 ④ 构造函数被系统自动调用 ⑤ 当一个类中没有定义任何构造函数时,系统将自动创建一 个默认构造函数
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 2.析构函数的功能和特点 (1)析构函数的功能 其功能是用来释放所创建的对象。当一个对象结束它的生存 期后,系统将自动调用析构函数来释放该对象。 (2)析构函数的特点 ①析构函数的名字同类名,并在类名前加一个字符“~”,以 与构造函数区别 ②析构函数无参数,因此无法重载 ③析构函数定义时无类型说明 ④析构函数是成员函数,它被系统自动调用 ⑤当一个系统没有定义析构函数时,系统将自动创建一个默 认的析构函数
2. 析构函数的功能和特点 (1) 析构函数的功能 其功能是用来释放所创建的对象。当一个对象结束它的生存 期后,系统将自动调用析构函数来释放该对象。 (2) 析构函数的特点 ① 析构函数的名字同类名,并在类名前加一个字符“~”,以 与构造函数区别 ② 析构函数无参数,因此无法重载 ③ 析构函数定义时无类型说明 ④ 析构函数是成员函数,它被系统自动调用 ⑤ 当一个系统没有定义析构函数时,系统将自动创建一个默 认的析构函数
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 3复制初始化构造函数 (1)复制初始化构造函数的功能 当使用一个已知对象来创建第一个与它相同的对象时,调用 复制初始化构造函数。 (2)复制初始化构造函数的特点 ①该函数名同类名,它也是一个成员函数 ②该函数不指定类型,只有一个参数,该参数为已知对象的 引用 ③该函数定义格式如下: 〈类名〉∴〈函数名〉( const〈类名〉&〈引用名〉) (函数体〉} ④当一个类中没有定义复制初始化构造函数时,系统将创建 个默认的初始化构造函数 参见[例5.3]、[例54]
3.复制初始化构造函数 (1)复制初始化构造函数的功能 当使用一个已知对象来创建第一个与它相同的对象时,调用 复制初始化构造函数。 (2)复制初始化构造函数的特点 ① 该函数名同类名,它也是一个成员函数 ② 该函数不指定类型,只有一个参数,该参数为已知对象的 引用 ③ 该函数定义格式如下: 〈类名〉∷〈函数名〉 (const〈类名〉&〈引用名〉) {〈函数体〉} ④ 当一个类中没有定义复制初始化构造函数时,系统将创建 一个默认的初始化构造函数 参见[例5.3]、[例5.4]
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 54成员函数的特征 1.内联性 定义在类体内的成员函数为内联函数,定义在类体外的成员 函数为外联函数。 2.重载性 成员函数可以重载。 3.设置参数默认值 成员函数可以设置参数的默认值。 参见[例56]、[例57]、[例58]
5.4 成员函数的特征 1. 内联性 定义在类体内的成员函数为内联函数,定义在类体外的成员 函数为外联函数。 2. 重载性 成员函数可以重载。 3. 设置参数默认值 成员函数可以设置参数的默认值。 参见[例5.6]、[例5.7]、[例5.8]