七章节类与对象.ppt

上传人:本田雅阁 文档编号:3246731 上传时间:2019-08-05 格式:PPT 页数:57 大小:1.19MB
返回 下载 相关 举报
七章节类与对象.ppt_第1页
第1页 / 共57页
七章节类与对象.ppt_第2页
第2页 / 共57页
七章节类与对象.ppt_第3页
第3页 / 共57页
七章节类与对象.ppt_第4页
第4页 / 共57页
七章节类与对象.ppt_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《七章节类与对象.ppt》由会员分享,可在线阅读,更多相关《七章节类与对象.ppt(57页珍藏版)》请在三一文库上搜索。

1、第七章 类与对象,3,教学目标,(1) 理解以类与对象为核心的面向对象程序设计的基本思想,包括封装、继承和多态性的概念及其在面向对象程序中的体现; (2) 掌握类的定义方法; (3) 掌握类成员的访问权限控制; (4) 掌握对象的创建与使用方法; (5) 了解构造函数与析构函数的定义与使用。 (6) 了解类的继承与派生、运算符重载、以及模板等概念。,4,基本内容,7.1 面向对象程序设计概述 7.2 类与对象 7.3 继承,5,7.1 面向对象程序设计概述,两种程序设计思想: 面向过程的程序设计(Structure Programming) 以功能为中心,采用函数来描述操作(动词) 面向对象程

2、序设计(Object Oriented Programming) 以数据为中心,采用对象来描述内部属性和操作方法(名词),6,对象和面向对象,客观世界实体 例:人类 静态特征(属性attribute) 姓名、性别、年龄、班级(/单位)、身高等 动态特征(行为behavior) 吃饭、睡觉、说话、走路、上课(/上班)等 例:汽车 静态特征(属性attribute) 品牌、生产厂、型号、颜色等 动态特征(行为behavior) 行驶、转弯、鸣笛、刹车等,7,面向对象的基本特征,抽象:数据抽象+代码抽象 封装:过程和数据封藏起来 继承:基类和派生类 多态性:虚函数、函数重载,8,OOP的优点,开发时

3、间短,效率高,可靠性高,所开发的程序更强壮 重用,共享,可维护性,精简 适合于大程序长时间的开发工作,9,7.2 类与对象,7.2.1 类的定义 7.2.2 成员函数 7.2.3 对象的使用 7.2.4 构造函数与析构函数,10,类(Class) -数据类型,类是具有相同属性和相同的方法的对象的集合,它是一种既包含数据又包含函数的抽象数据类型。 类的构成 数据成员(Data Member),即类的属性; 成员函数(Member Function),即类的方法;,11,7.2.1 类的定义,class 类名 private: /私有成员 私有的数据成员和成员函数; protected: /保护成

4、员 保护的数据成员和成员函数; public: /公有成员 公有的数据成员和成员函数; ;,12,访问控制权限,私有部分(private):数据成员和成员函数只能在该类的范围内被本类的成员函数访问体现类的封装性 保护部分(protected):与私有成员的性质相似 公有部分(public):成员既可以被本类的成员函数访问,也在类外被该类的对象访问对外界的接口,13,例:定义一个狗类(Dog),class Dog private: char name20; / 狗的名字 int age; / 狗的年龄 public: void set(char *n, int a); / 设置数据成员值的函数

5、void display(); / 输出数据成员值的函数 void speak(); / 发出狗叫声的函数 ;,14,7.2.2 成员函数,成员函数的一般形式: 函数类型 类名 : 函数名 ( 参数表 ) 函数体 ,15,类的作用域,一个类的所有数据成员和成员函数都在该类的作用域内(包括在类声明外部定义的成员函数) 类中的每个成员都可以直接访问本类中的其他任何成员。 如果在类作用域之外对该类的数据成员和成员函数进行访问,则要受到一定的限制,有时甚至是不允许的。,16,例:Dog类成员函数的定义,void Dog:set(char *n, int a) strcpy(name,n); age =

6、 a; void Dog:display() coutnametageendl; void Dog: speak() cout“Arf!Arf!“endl; ,/ Dog类较完整的定义 class Dog private: char name20; int age; public: void set(char *n, int a); void display(); void speak(); ; void Dog:set(char *n, int a) strcpy(name,n); age = a; void Dog:display() coutnametageendl; void Dog:

7、 speak() cout“Arf!Arf!“endl; ,/ 当成员函数比较简单时,可在类定义中直接给出函数体 class Dog private: char name20; int age; public: void set(char *n, int a) strcpy(name,n); age = a; void display() coutnametageendl; void speak() cout“Arf!Arf!“endl; ;,19,7.2.3 对象的使用,对象是类的实例,先声明后使用 说明对象的一般形式(类的实例化): 类名 对象名表; 对类成员的访问 . 运算符 - 运算符

8、,20,例7-1: Dog类和对象,int main() char name020; int age0; Dog dog1, dog2; cout name0 age0; dog1.set (name0, age0); cout “第一条狗:“ endl; dog1.display(); dog1.speak(); dog2.set (“LaiFu“, 2); cout “第二条狗:“ endl; dog2.display (); dog2.speak(); dog1=dog2; / 同类对象之间可以互相赋值 cout “对象赋值后的第一条狗:“ endl; dog1.display(); d

9、og1.speak(); return 0; ,21,对象的使用,成员函数可直接访问本类中定义的数据成员(公有和私有)类的作用域内 类的对象访问其公有数据成员或成员函数需使用运算符“” 禁止直接访问一个对象中的私有/保护成员 同类对象之间可以整体赋值 对象用作函数的参数时属于赋值调用;函数可以返回一个对象。,22,7.2.4 构造函数与析构函数,构造函数(Constructor)是类的一个特殊成员函数,定义了创建对象的方法,提供了初始化对象的一种简便手段。 与构造函数相对应,析构函数(Destructor)用于撤消一个对象,完成释放对象成员所占存储空间的工作。,23,构造函数(Construc

10、tor),格式: 类名 : 类名 (参数表) 函数体 注意事项: 构造函数必须与类名相同 构造函数没有返回值 其功能是对对象进行初始化,一般由一系列赋值语句构成 由系统自动调用,24,析构函数(Destructor),格式为: 类名:类名(); 注意事项: 函数名与类名相同,只是在前边加“”符号 析构函数不得返回任何值 析构函数不得带有任何参数 其功能是释放对象成员所占用的存储,一般由一系列的delete组成 由系统自动调用,25,例7-2: 使用构造函数和析构函数的Dog类,class Dog char name20; int age; public: Dog() / 构造函数1 strcp

11、y(name, “XXX“); age = 0; Dog(char *n, int a) / 构造函数2 strcpy(name, n); age = a; Dog() / 析构函数 cout“析构函数被调用“endl; void display() coutnametageendl; void speak() cout“Arf!Arf!“endl; ;,26,7.3 继承,7.3.1 派生类的定义 7.3.2 派生类的继承方式和访问属性 7.3.3 派生类的构造函数和析构函数,27,生物类的层次关系,28,7.3.1 派生类的定义,派生类的定义格式为: class 派生类名:继承方式 基类名

12、1,继承方式 基类名2,继承方式 基类名n 派生类增加的成员声明; ;,29,/人员类定义 class Person protected: char Name10; /姓名 char Sex; /性别 public: void ShowMe() /显示数据成员 cout Namet Sexn; ; /雇员类定义 class Employee : public Person char Dept20; /工作部门 public: void ShowMe() /显示数据成员 cout Namet Sext Dept n; ;,单继承的例子,30,/飞机类 class Plane char prope

13、ller; /螺旋桨 public: void flying(); /飞行方法 ; /船类 class Boat char helm; /舵 public: void floating(); /飘浮方法 ; /水上飞机类 class Seaplane : public Plane, public Boat ;,多继承的例子,31,7.3.2 派生类的继承方式和访问属性,私有继承private 公有继承public 保护继承protected,32,派生类的定义格式,class 派生类名:private | protected | public 基类名 private: protected: p

14、ublic: ; 系统的默认值是私有继承,33,公有继承(public),以公有继承方式创建的派生类对基类各种成员访问权限如下 : 基类公有成员相当于派生类的公有成员,即派生类可以象访问自身公有成员一样访问从基类继承的公有成员。 基类保护成员相当于派生类的保护成员,即派生类可以象访问自身的保护成员一样,访问基类的保护成员。 对于基类的私有成员,派生类无法直接访问。,34,私有继承 (private),派生类对基类各种成员访问权限如下 : 基类公有成员和保护成员都相当于派生类的私有成员,派生类只能通过自身的函数成员访问它们; 对于基类的私有成员,无论派生类内部成员或派生类使用者都无法直接访问。,35,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1