C面向对象程序设计.ppt
《C面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《C面向对象程序设计.ppt(90页珍藏版)》请在三一办公上搜索。
1、本章主要知识点(1)C+面向对象的程序实例(2)类与对象(3)继承与派生(4)运算符重载,本章导读C语言是一种结构化程序设计语言,它是面向过程的,在处理较小规模的程序时一般比较容易实现,而当程序规模较大时,C语言就显示出了它的不足。在这种情况下C+应运而生,C+语言是从C语言演变而来的,它保留了C语言的所有优点,同时也增加了面向对象的功能。现在C+已成为程序设计中应用最广泛的一种语言。,C语言程序设计(Visual C+6.0环境),返回本书目录,第10章 C+面向对象程序设计,第10章 C+面向对象程序设计,C语言程序设计(Visual C+6.0环境),返回本章导读,10.2 类与对象,1
2、0.3 继承与派生,10.5 综合实训,10.4 运算符重载,10.1 C+面向对象的程序实例,C语言程序设计(Visual C+6.0环境),返回本章目录,10.1.2 C+语言概述,C+面向对象的程序实例,10.1 C+面向对象的程序实例,10.1.1 C+面向对象的程序实例,C语言程序设计(Visual C+6.0环境),返回本节目录,2.C+程序实例(2),3.C+程序实例(3),1.C+程序实例(1),【例10.1】定义一个矩形类。(程序名为l10_1.cpp。)#includeclass rectangle/定义一个矩形类 public:rectangle(float len,fl
3、oat wid)/构造函数 length=len;width=wid;float GetArea();/声明成员函数,计算矩形面积 float GetPerimeter();/声明成员函数,计算矩形周长 rectangle()/析构函数 private:float length;/私有数据 float width;,10.1.1 C+面向对象的程序实例,C语言程序设计(Visual C+6.0环境),返回本节目录,1.C+程序实例1,float rectangle:GetArea()/成员函数的具体实现return length*width;float rectangle:GetPerimet
4、er()/成员函数的具体实现return 2*(length+width);void main()float l,w;coutlw;rectangle x(l,w);/定义一个矩形类对象 coutx.GetArea()endl;coutx.GetPerimeter()endl;/调用成员函数,10.1.1 C+面向对象的程序实例,C语言程序设计(Visual C+6.0环境),返回本节目录,10.1.1 C+面向对象的程序实例,C语言程序设计(Visual C+6.0环境),返回本节目录,实例1的功能是定义一个矩形类,该类有长和宽两个数据成员,用来描述矩形的静态特征(属性),有构造函数用来用初
5、始化类对象,另外还有计算面积和周长两个成员函数作为该类的外部接口,供类外的程序访问。当用户输入矩形的长和宽之后,将构造一个实例矩形,并输出矩形的面积和周长。例如用户输入5,6,则输出结果为:3022,【例10.2】类的派生。(程序名为l10_2.cpp。)#includeclass rectangle/定义矩形类 public:void InitRect(float len,float wid)/定义类的成员函数 length=len;width=wid;float GetArea();float GetPerimeter();private:/定义私有成员变量 float length;fl
6、oat width;float rectangle:GetArea()/成员函数实现 return length*width;,10.1.1 C+面向对象的程序实例,C语言程序设计(Visual C+6.0环境),返回本节目录,2.C+程序实例2,float rectangle:GetPerimeter()/成员函数实现return 2*(length+width);class square:public rectangle/从矩形类中派生新类(正方形类)public:void InitSquare(float b)InitRect(b,b);/新增的成员函数(初始化;/正方形)void ma
7、in()square x;/声明正方形类对象x.InitSquare(8);/调用正方形类新增的成员函数 coutx.GetArea()endl;/调用从矩形类中继承下来的成员函数coutx.GetPerimeter()endl;/调用从矩形类中继承下来的成员/函数(GetPerimeter),10.1.1 C+面向对象的程序实例,C语言程序设计(Visual C+6.0环境),返回本节目录,10.1.1 C+面向对象的程序实例,C语言程序设计(Visual C+6.0环境),返回本节目录,实例2的功能是先定义一个矩形类,然后从该矩形类中派生出一个新的正方形类(正方形是矩形的一个特例)。程序中
8、先声明一个正方形类对象,然后将其初始化为边长为8的正方形,再调用从矩形类中继承下来的计算面积和周长两个函数,计算出正方形的面积和周长。该程序的输出结果为:6432,【例10.3】“+”运算符重载。(程序名为l10_3.cpp。)#includeclass rectangle/定义一个矩形类public:rectangle(float len=0,float wid=0)/构造函数 length=len;width=wid;float GetArea()return length*width;/成员函数(计算面积)rectangle operator+(rectangle a2)/将+运算符重载
9、 rectangle a;/用于两个矩形对象相加a.length=length;a.width=width+a2.GetArea()/length;return rectangle(a.length,a.width);,10.1.1 C+面向对象的程序实例,C语言程序设计(Visual C+6.0环境),返回本节目录,3.C+程序实例3,private:/私有成员变量 float length;float width;void main()rectangle x(5,9),y(5,6),z;/声明类对象 cout第一个矩形面积为:x.GetArea()endl;cout第二个矩形面积为:y.G
10、etArea()endl;z=x+y;/对两个矩形相加 cout两个矩形面积之和为:z.GetArea()endl;,10.1.1 C+面向对象的程序实例,C语言程序设计(Visual C+6.0环境),返回本节目录,实例3的功能是先定义一个矩形类,然后将“+”运算符重载为可以使两个矩形类对象相加。该程序的输出结果为:第一个矩形面积为:45第二个矩形面积为:30两个矩形面积之和为:75,10.1.2 C+语言概述,C语言程序设计(Visual C+6.0环境),返回本节目录,由于结构化程序设计自身的不足,在20世纪80年代出现了面向对象程序设计方法,C+语言也由此而产生。面向对象程序设计(Ob
11、ject-Oriented programming,简称OOP)设计的出发点就是为了能更直接的描述客观世界中存在的事物(即对象)以及它们之间的关系。面向对象程序设计是对结构化程序设计的继承和发展,它认为现实世界是由一系列彼此相关且能相互通信的实体组成,这些实体就是面向对象方法中的对象,而对一些对象的共性的抽象描述,就是面向对象方法中的类。类是面向对象程序设计的核心。,10.1.2 C+语言概述,C语言程序设计(Visual C+6.0环境),返回本节目录,C+是目前最流行的面向对象程序设计语言。它在C语言的基础上进行了改进和扩充,并增加了面向对象程序设计的功能,更适合于开发大型的软件。C+是由
12、贝尔实验室在C语言的基础开发成功的,C+保留了C语言原有的所有优点,同时与C语言又完全兼容。它既可以用于结构化程序设计,又可用于面向对象程序设计,因此C+是一个功能强大的混合型程序设计语言。C+最有意义的方面是支持面向对象程序设计的特征。虽然与C语言的兼容性使得C+具有双重特点,但它在概念上和C语言是完全不同的,学习C+应该按照面向对象程序的思维去编写程序。,C语言程序设计(Visual C+6.0环境),返回本章目录,10.2.2 类的构造与封装,10.2.1 面向对象的基本概念,10.2 类与对象,10.2.3 创建对象,10.2.4 友元,10.2.5 模板,10.2.6 程序实训,10
13、.2.1 面向对象的基本概念,C语言程序设计(Visual C+6.0环境),返回本节目录,1.对象,从一般意义上讲,客观世界中任何一个事物都可以看成是一个对象。例如一本书,一名学生等。对象具有自己的静态特征和动态特征。静态特征可以用某种数据来描述,如一名学生的身高、年龄、性别等;动态特征是对象所表现的行为或具有的功能,如学生学习、运动、休息等。面向对象方法中的对象是系统中用来描述客观事物的一个实体,它是用来构成系统的一个基本单位,对象由一组属性和一组行为构成。属性是用来描述对象静态特征的数据项,行为是用来描述对象动态特征的操作序列。,许多对象具有相同的结构和特性,例如不管是数学书还是化学书,
14、它们都具有大小、定价、编者等特性。在现实生活中,我们通常将具有相同性质的事物归纳、划分成一类,例如数学书和化学书都属于书这一类。同样在面向对象程序设计中也会采用这种方法。面向对象方法中的类是具有相同属性和行为的一组对象的集合。类代表了一组对象的共性和特征,类是对象的抽象,而对象是类的具体实例。例如,家具设计师按照家具的设计图做成一把椅子,那么设计图就好比是一个类,而做出来的椅子则是该类的一个对象,一个具体实例。拿【例10.1】中定义的矩形类来说,该类只是所有矩形的一个蓝本,它只是代表了矩形的一些特征,而该类的实例则是一个特定的矩形。,10.2.1 面向对象的基本概念,C语言程序设计(Visua
15、l C+6.0环境),返回本节目录,2类,10.2.2 类的构造与封装,C语言程序设计(Visual C+6.0环境),返回本节目录,1类的封装,类的封装就是将对象的属性和行为结合成一个独立的实体,并尽可能隐蔽对象的内部细节,对外形成一道屏障,只保留有限的对外接口使之和外界发生联系。类的成员包括数据成员和成员函数,分别描述类所表达问题的属性和行为。对类成员的访问加以控制就形成了类的封装,这种控制是通过设置成员的访问权限来实现的。在面向对象程序设计中,通过封装将一部分行为作为外部接口,而将数据和其它行为进行有效的隐蔽,就可以达到对数据访问权限的合理控制。把整个程序中不同部分的相互影响减少到最低限
16、度。,10.2.2 类的构造与封装,C语言程序设计(Visual C+6.0环境),返回本节目录,2类的定义,类定义的一般格式为:class 类名称public:公有数据和成员函数/*外部接口*/protected:保护数据的成员函数private:私有数据和成员函数;,10.2.2 类的构造与封装,C语言程序设计(Visual C+6.0环境),返回本节目录,关键字class说明了类定义的开始,类中所有的内容用大括号括起来。类的成员可分为三种级别的访问权限:public(公有的):说明该成员是公有的,它不但可以被类的成员函数访问,而且可以被外界访问,所以说公有类型定义了类的外部接口。Prot
17、ected(保护的):说明该成员只能被该类的成员函数和该类的派生类的成员函数访问。Private(私有的):说明该成员只能被类的成员函数访问,外界不能直接访问它。类的数据成员一般都应该声明为私有成员。,10.2.2 类的构造与封装,C语言程序设计(Visual C+6.0环境),返回本节目录,3类的成员函数,类的成员函数描述的是类的行为。定义类时在类定义体中给出函数的声明,说明函数的参数列表和返回值类型,而函数的具体实现一般在类定义体之外给出。下面是类外定义成员函数的一般格式:返回值类型 类名:类成员函数名(参数列表)函数体其中:称为作用域分辨符。用它可以限制要访问的成员所在的类的名称。,在建
18、立一个对象时,常常需要作一些初始化工作,而当对象使用结束时,又需要作一些清理工作。在C+中提供了两个特殊的成员函数来完成这两项工作,那就是构造函数和析构函数。构造函数的作用就是在对象在被创建时利用特定的值构造对象,将对象初始化。构造函数完成的是一个从一般到具体的过程。需要注意的是构造函数同其它的成员函数不同,它不需要用户触发,而是在创建对象时由系统自动调用,其它任何过程都无法再调用构造函数。构造函数的函数名必须与类名相同,而且不能有返回值,也不需加void类型声明。构造函数可以带参数也可以不带参数。构造函数一般定义为公有类型。,10.2.2 类的构造与封装,C语言程序设计(Visual C+6
19、.0环境),返回本节目录,4构造函数和析构函数,10.2.2 类的构造与封装,C语言程序设计(Visual C+6.0环境),返回本节目录,析构函数也是类的一个公有成员函数,其作用与构造函数正好相反,它是用来在对象被删除前进行一些清理工作。析构函数调用之后,对象被撤消了,相应的内存空间也将被释放。析构函数名也应与类名相同,只是函数名前加一个波浪符“”,以区别于构造函数。析构函数不能有任何参数,且不能有返回值。如果不进行显式说明,系统会自动生成缺省的析构函数,所以一些简单的类定义中没有显式的析构函数。,5构造函数与析构函数应用实例,10.2.2 类的构造与封装,C语言程序设计(Visual C+
20、6.0环境),返回本节目录,【例10.4】程序名为l10_4.cpp。#includeclass A/定义类A public:A()cout“构造函数被调用”endl;/构造函数 void disp()/成员函数 cout“构造函数与析构函数应用举例”endl;A()/析构函数 cout析构函数被调用endl;,程序在声明A类的对象时,系统会自动调用构造函数,因而先执行构造函数中的输出语句,输出“构造函数被调用”,接下来调用disp成员函数,执行disp成员函数中的输出语句,输出“构造函数与析构函数应用举例”,最后程序在退出前由系统自动调用析构函数,执行析构函数中的输出语句,输出“析构函数被调
21、用”,因此程序的输出结果为:构造函数被调用构造函数与析构函数应用举例析构函数被调用,10.2.2 类的构造与封装,C语言程序设计(Visual C+6.0环境),返回本节目录,void main()A a;/声明类对象,自动调用构造函数 a.disp();/调用成员函数,对象使用结束时/自动调用析构函数,6.实例分析,10.2.3 创建对象,C语言程序设计(Visual C+6.0环境),返回本节目录,通过使用数组,我们可以对大量的数据和对象进行有效的管理,但对于许多程序,在运行之前,我们并不能确切地知道数组中会有多少个元素。例如,一个网络中有多少个可用节点,一个CAD系统中会用到多少个形状等
22、。如果数组开的太大会造成很大的浪费,如果数组较小则又影响大量数据的处理。在C+中,动态内存分配技术可以保证我们在程序运行过程中按实际需要申请适量的内存,使用结束后再进行释放。这种在程序运行过程中申请和释放存储单元的过程称为创建对象和删除对象。,1new运算符,C+用new运算符来创建对象。运算符new的功能是动态创建对象,其语法形式为:new 类型名(初值列表);该语句的功能是在程序运行过程中申请用于存放指定类型的内存空间,并用初值列表中给出的值进行初始化。如果创建的对象是普通变量,初始化工作就是赋值,如果创建的对象是某一个类的实例对象,则要根据实际情况调用该类的构造函数。例如:int*p;p
23、=new int(100);/赋值给指针变量例如:rectangle*r;r=new rectangle(5,6);/调用矩形类的构造函数如果创建的对象是数组类型,则应按照数组的结构来创建,其语法形式为:,10.2.3 创建对象,C语言程序设计(Visual C+6.0环境),返回本节目录,10.2.3 创建对象,C语言程序设计(Visual C+6.0环境),返回本节目录,一维数组:new 类型名下标;当数组为一维数组时,下标为数组为元素的个数,动态分配内存时不能指定数组元素的初值。如果内存申请成功,返回一个指向新分配内存的首地址的指定类型的指针,如果失败返回0。例如:int*p;p=new
24、 int10;多维数组:new 类型名下标1下标2;当数组为多维数组时,返回一个指向新分配内存的首地址的指针,但该指针的类型为指定类型的数组。数组元素的个数为除最左边一维外下标的乘积。例如:int(*p)5;p=new int105;,10.2.3 创建对象,C语言程序设计(Visual C+6.0环境),返回本节目录,2delete运算符,运算符delete的功能是删除由new运算符创建的对象,释放指针指向的内存空间,其语法形式为:delete 指针名;例如:int*p;p=new int(100);delete p;如果new 运算符创建的对象是数组,则删除对象时应使用的语法形式为:del
25、ete 指针名;例如:int*p;p=new int10;delete p;,10.2.3 创建对象,C语言程序设计(Visual C+6.0环境),返回本节目录,3C+程序实例,【例10.5】类对象的创建与删除。(程序名为l10_5.cpp。)#includeclass rectangle/定义一个矩形类 public:rectangle(float len,float wid)/构造函数 length=len;width=wid;float GetArea();/成员函数private:float length;float width;,10.2.3 创建对象,C语言程序设计(Visual



- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计

链接地址:https://www.31ppt.com/p-5426586.html