第9章 类和对象
2021/2/24 1 第9章 类和对象
概述 为什么定义类把现实世界的事物归纳成类,以 贴近自然的方式描述现实系统。类是结构的扩展, 可用来对外部函数访问作限制。 局部变量隐藏在函数体内;通→数据量大时,效率低 过函数的参数传递共享变量 使用全局变量,程序中每个函 查错困难 数都可以访问。 使用静态全局变量,局限于文件。 2021/224
2021/2/24 2 为什么定义类 把现实世界的事物归纳成类,以 贴近自然的方式描述现实系统。类是结构的扩展, 可用来对外部函数访问作限制。 概述 局部变量隐藏在函数体内;通 过函数的参数传递共享变量。 使用静态全局变量,局限于文件。 数据量大时,效率低 使用全局变量,程序中每个函 数都可以访问。 查错困难
外部函数可直接访问 破坏了数据的封装特性 结构的成员。 C艹引入类解决上述问题(限制全局变量使用和 构成新类型) 2021/224
2021/2/24 3 C++引入类解决上述问题(限制全局变量使用和 构成新类型) 外部函数可直接访问 结构的成员。 破坏了数据的封装特性
类 什么是类将数据与处理这些数据的函数封装成 个整体,即构成了类。封装可以解决数据与函 数代码之间的相容性和数据的保护问题。 类的组成类名、数据成员(属性、data member)、成员函数(服务、 member function) 与结构不同之处是成员访问说明符。 除该类的成员函数外, 访问说明符 protecta 谁都不得访问 publi 程序中所有函数都可 访问 2021/224
2021/2/24 4 类的组成 类名、数据成员(属性、data member)、成员函数(服务、member function)。 什么是类 将数据与处理这些数据的函数封装成 一个整体,即构成了类。封装可以解决数据与函 数代码之间的相容性和数据的保护问题。 类 与结构不同之处是成员访问说明符。 除该类的成员函数外, 谁都不得访问 程序中所有函数都可 访问 public protected private 访问说明符
proceted所限定的成员为保护成员,它允许该类成员 及该类的派生类成员函数存取保护成员数据或调用保 护成员函数。 注:1.三个关键字的顺序无关紧要,且可多次使用。 2.一个关键字的访问权限自紧跟关键字后的第 个成员 起,至出现另一个限定访问权限的关键字止 3类体中成员的顺序不限,建议成员数据集中 在类体 的前面定义,成员函数集中在类体的后面定义。 类的实例称为对象。 2021/2/24 5
2021/2/24 5 注:1.三个关键字的顺序无关紧要,且可多次使用。 2.一个关键字的访问权限自紧跟关键字后的第一 个成员 起,至出现另一个限定访问权限的关键字止。 3.类体中成员的顺序不限,建议成员数据集中 在类体 的前面定义,成员函数集中在类体的后面定义。 proceted所限定的成员为保护成员,它允许该类成员 及该类的派生类成员函数存取保护成员数据或调用保 护成员函数。 类的实例称为对象
类的定义 class className ∥以关键字clas开 中为类 public 7尖的公有成员 data members: ∥公有数据成员 member functions: ∥公有成员函数 protected: /类的保护成是 data members: 保护数类中定义 member functions;/保护的数据和 private: /类的 函数称为 data members member function /私有类的成员 有成员 ∥以括号及分号结束,体现装 缺省时为私有成员 private 2021/224 6
2021/2/24 6 类的定义 class className //以关键字class 开头 { public: //类的公有成员 data members; //公有数据成员 member functions; //公有成员函数 protected: //类的保护成员 data members; //保护数据成员 member functions; //保护成员函数 private: //类的私有成员 data members; //私有数据成员 member functions; //私有成员函数 }; //以括号及分号结束,体现封装 缺省时为私有成员(private) {}中为类体 类中定义 的数据和 函数称为 类的成员
例1:定义描述一个人的类。 分析:描述一个人的特征用姓名、性别、年龄来表 示。用函数 Registerperson()登录一个人的姓名、性 别和年龄;用函数 getName(来获取一个人的姓名; 用另外两个函数 Getage(和 Getsex()来获取一个人 的年龄和性别。 91 也可省略为如下定义: 911 如下定义时不可省略 912 2021/224
2021/2/24 7 例1:定义描述一个人的类。 分析:描述一个人的特征用姓名、性别、年龄来表 示。用函数RegisterPerson( )登录一个人的姓名、性 别和年龄;用函数getName( )来获取一个人的姓名; 用另外两个函数GetAge( )和GetSex( )来获取一个人 的年龄和性别。 91 也可省略为如下定义: 911 912 如下定义时不可省略:
类的成员函数定义一般格式: 数据类型类名:成员函数名{ 例2:定义 Person的四个成员函数 92 2021/224 8
2021/2/24 8 类的成员函数定义一般格式: 数据类型 类名::成员函数名 { …… } 例2:定义Person的四个成员函数。 92
注:1类中任何成员数据不能使用关键字 extern、 auto或 register限定其存储类型。 2成员函数可直接使用类中的任一成员 3在定义类中的数据成员时,不能对其初始 化。如: class Test int x=5, y=6; ∥误 extern float x ∥误 若定义的成员限于该类的成员函数使用时, 应指定为私有成员,若允许类外使用时,应定义 为公有的。 2021/224 9
2021/2/24 9 注:1.类中任何成员数据不能使用关键字extern、 auto或register限定其存储类型。 2.成员函数可直接使用类中的任一成员。 3.在定义类中的数据成员时,不能对其初始 化。如: class Test{ int x=5,y=6; //错误 extern float x; //错误 … } 4.若定义的成员限于该类的成员函数使用时, 应指定为私有成员,若允许类外使用时,应定义 为公有的
例3:定义并实现类stu #include<iostream.\ udent class student ∥定义类 private: /类私有成员 float score; publics /类的公有成员 void input(float s)score=s void modify (float s)scores;) void display i cout <<n score: < score;) void main(i ∥函数 student ss: 声明对象 SS input(88.5); ∥调用成员函数 SS display; 2021/2/24 10
2021/2/24 10 例3:定义并实现类 student。 #include class student{ //定义类 private: //类私有成员 float score; public: //类的公有成员 void input(float s) {score=s;} void modify(float s) {score=s;} void display( ) { cout << "\n score: "<< score; } }; void main( ) { //主函数 student ss; //声明对象 ss.input(88.5); //调用成员函数 ss.display( ); }