C_C++程序设计基础 教学课件 ppt 作者 李凤云 第15章 C++面向对象基础

上传人:E**** 文档编号:89344247 上传时间:2019-05-23 格式:PPT 页数:48 大小:175.50KB
返回 下载 相关 举报
C_C++程序设计基础 教学课件 ppt 作者  李凤云 第15章 C++面向对象基础_第1页
第1页 / 共48页
C_C++程序设计基础 教学课件 ppt 作者  李凤云 第15章 C++面向对象基础_第2页
第2页 / 共48页
C_C++程序设计基础 教学课件 ppt 作者  李凤云 第15章 C++面向对象基础_第3页
第3页 / 共48页
C_C++程序设计基础 教学课件 ppt 作者  李凤云 第15章 C++面向对象基础_第4页
第4页 / 共48页
C_C++程序设计基础 教学课件 ppt 作者  李凤云 第15章 C++面向对象基础_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《C_C++程序设计基础 教学课件 ppt 作者 李凤云 第15章 C++面向对象基础》由会员分享,可在线阅读,更多相关《C_C++程序设计基础 教学课件 ppt 作者 李凤云 第15章 C++面向对象基础(48页珍藏版)》请在金锄头文库上搜索。

1、第15章 C+面向对象基础,15.1面向对象程序设计的基本概念 面向对象技术(Object-Oriented echnology)是在80年代末出现的,它是为了适应开发和维护复杂应用软件的需要,为解决软件危机而诞生的。面向对象的程序设计方法是继结构化程序设计方法之后的一种新的程序方法。在面向对象的程序设计中,通过对象来表示事物,用对象(Object)与对象间消息的传递来表现事物间的联系;用对象的方法实现对对象的操作。什么是对象呢?从概念上讲,对象是代表着正在创建的系统中的一个实体。从实现形式上讲,对象是一个状态和操作(或方法)的封装体。状态由对象的数据结构的内容和值定义,方法是一系列的实现步骤

2、,它由若干操作构成。对对象进行抽象形成类。,抽象是一种提炼对象特征的方法,它可以将具有公共行为的对象组织成类。类是抽象数据类型的实现,一个类的所有对象都有相同的数据结构,并且共享相同的实现操作的代码,而各个对象有着各自不同的状态,即私有的存储。因此,类是所有对象的共同的行为和不同状态的集合体。面向对象技术的基本特征主要有:封装性、继承性、多态性。 封装性:是将数据结构和对数据进行的操作结合在一起,形式一个整体,对外隐蔽其内部实现细节,同时避免了数据紊乱带来的调试与维护的困难。,继承性:是一个对象可以获得另一个对象的特性的机制。对象的特性包括对象的属性(数据)和方法(函数)。继承增强了软件的可扩

3、充性,并为代码重用提供了强有力的手段。 多态性:指相同的函数调用被不同的对象接收时,可以导致不同的行为。它使程序员在设计程序时可以对问题进行更好的抽象,以设计出重用性和维护性俱佳的程序。,15.2类和对象,C+作为C语言的超集,涵盖了C语言的主要概念和功能,但它同时又引入了一些新的概念,其中最主要的是类和对象的概念。类的设计和使用体现了面向对象的设计思想。面向对象的程序设计是从分析对象开始的。对象分析方法的有力工具是分类找出一类具有相同属性的对象,并将它们的共同属性用类表示。在实际的程序设计中,是先定义问题域中的相关对象类(class),然后由类生成对象。因此,类是由用户定义的特殊数据类型。,

4、15.2.1类的定义与实现 类中定义的数据和函数分别称为数据成员和成员函数。类的定义格式一般地分为说明部分和实现部分。说明部分是用来说明该类中的成员,包含数据成员的说明和成员函数的说明。成员函数是用来对数据成员进行操作的,又称为“方法”。实现部分是成员函数的定义。概括起来,说明部分将告诉使用者“干什么”,而实现部分是告诉使用者“怎么干”。类的定义与C语言中的结构体类似,但结构体中只能定义属性不能定义对这些属性进行操作的方法(函数)。,类的定义使用关键字class,其后面的标识符定义了一个新的类型,可以使用这个标识符说明类的变量和指向类的指针。 例:定义一个名为TPerson的类,包括这个人的姓

5、名、年龄、性别、家庭住址、电话等不同属性,以及对这些属性操作的两个函数。 class TPerson /通常用T字母开始的字符串作为类名,以示与 /对象、函数名区别 private: char name20; int age; char sex; char address20; long tel; public: void setdata( ); void print( ); ; /分号不可缺少,面向对象的程序设计强调信息隐藏,将实现细节和不允许外部访问的部分隐藏起来,为此它把类成员分为公开的(public)与私有的(private)两类。外界不能直接访问一个对象的私有部分,它们与对象间的信息

6、传送只能通过公开成员进行。上面的例子中一共定义了7个成员:5个成员数据,2个成员函数。成员数据一般不能让外界直接访问,只能通过本类的成员函数访问。所以把5个成员数据定义成私有成员(用private定义),把成员函数定义为公开成员(用public定义)。,关键字private 、public被称为访问权限修饰符或访问控制修饰符。在一个类的定义中,关键字private 、public出现的顺序与次数可以是任意的。C+规定,类成员隐含的访问权限是私有的,不加声明的成员都默认为私有的。因此,最前面的关键字private可以缺省。而结构体类型的成员的隐含访问权限是公开的。 类的实现,就是进一步定义它的成

7、员函数。成员函数是类定义中用以描述对象行为的成员。在成员函数中,可以直接访问类的所有成员。成员函数的定义方式与普通函数大体相同,以下几点需加以说明:,成员函数可以在类中定义。例如: class TPerson private: char name20; int age; char sex; char address20; long tel; public: void setdata( ) strcpy(name,“liling“); age=18; sex=f; strcpy(address,“249 shanghailu“); tel=3041725; void print( ) coutn

8、ame“,“age“,“sex“,“address“,“telendl; ;,在类定义外部定义成员函数时,应使用作用域限定符“:”指明该函数是哪个类中的成员函数。例如: class TPerson private: char name20; int age; char sex; char address20; long tel; public: void setdata( ); /函数原型 void print( ); ; void TPerson:setdata( ) /函数实现 strcpy(name,“liling“); age=18; sex=f; strcpy(address,“24

9、9 shanghailu“); tel=3041725; void TPerson:print( ) /函数实现 coutname“,“age“,“sex“,“address“,“telendl; ,类的成员函数也可以重载。 例15.1: #include class point int x,y; public: void set(int xp,int yp) /成员函数set x=xp;y=yp; cout“x=“xendl; cout“y=“yendl; ; void set(point p) /成员函数set重载 x=p.x;y=p.y; cout “point:“x; cout“;“y

10、endl; ; void main() point pp,qq; /定义point类的对象pp和qq pp.set(10,20); qq.set(pp); ,运行结果: x=10 y=20 point:10,20 注意:在类定义中,不允许对所定义的数据成员进行初始化。,例15.2分析下面程序的输出结果。 #include class R public: R(int r1,int r2)R1=r1;R2=r2; void print() const; private: int R1,R2; ; void R:print()const coutR1“;“R2endl; void main() co

11、nst R b(20,52); b.print(); 程序运行结果如下: 20;52,说明: 在类R中,说明了一个常成员函数print()。 常成员函数说明格式如下: () const; 其中,const是加在函数说明后面的类型修饰符,它是函数类型的一个组成部分,因此,在函数实现部分也要带const关键字。 在main()函数中,定义了一个常对象b,只有常成员函数才能操作常对象,没有使用const关键字说明的成员函数不能用来操作常对象。,15.2.2对象的定义 定义了一个类之后,便可以像用int、char等类型符声明简单变量一样,用它们定义对象,也称为类的实例化。有时也可以将对象称为类变量,因

12、为它同变量一样是程序实体,并具有像变量一样的属性,如生存期等存储属性。 类的实例化通过声明语句进行。如已经定义了类TPerson,便可以用声明语句生成对象: TPerson zhang, li;,应当注意,一个类只是定义了一种类型,只有它被实例化,生成对象后,才能接收和存储具体的值。Zhang、li便是两个不同的对象,它们占有不同的内存区域,保存有不同的数据,但它们形式相同,操作代码也相同。对象的定义格式为: 类名 对象名表; 每个对象都是由数据成员和成员函数组成的。既可以访问对象的数据成员,也可以访问对象的成员函数。访问成员函数时,将执行实现该成员函数的代码。C+在实现时,成员函数为该类的所

13、有对象共享。 访问对象的成员使用“.”运算符,其格式为: 对象名.对象成员名,例15.3:使用TPerson类的一个简单程序。 #include #include class TPerson ; void main( ) TPerson my; /声明TPerson类的对象my my.setdata(); /调用TPerson类的成员函数setdata() my.print(); /调用TPerson类的成员函数print() 运行结果如下: liling18f249 shanghailu3041725,用指向对象的指针访问对象的成员,其格式为: 指向对象的指针名-对象成员名 例如: TPer

14、son zhang; /生成TPerson类的对象zhang TPerson *pc; /声明指向TPerson类的对象的指针 pc= 它等价于: (*pc).print();,前面讲述了通过定义成员函数的方法给对象的数据成员赋值。下面讲述如何对对象进行初始化。 在C+中,声明一个类的变量时,可以自动的调用一个用户定义的初始化函数。这个函数是类的特殊的成员函数,称为构造函数。构造函数可以由用户定义,也可以由系统给出。系统给出的的构造函数称为缺省构造函数。缺省构造函数不能对对象中的成员数据进行有效的初始化。当声明一个对象时,程序将自动调用类的构造函数。类的构造函数和类有相同的名字。构造函数不返回

15、任何值,也不能返回void。,例:对类TPerson可以定义如下构造函数取代上面定义的setdata()函数。 TPerson:TPerson(void) strcpy(name,“ liling“); age=18; sex= f ; strcpy(address,“249 shanghailu“); tel=3041725; ,析构函数也是一种特殊的类成员函数,它的功能正好与构造函数相反。析构函数用于释放对象被分配的内存空间,在对象删除前,用它来做一些清理工作。析构函数的名字是类名前加一个“”符号。析构函数不返回任何值,也不能返回void。如果一个类中没有定义析构函数时,编译系统也生成一个缺省析构函数,缺省析构函数是一个空函数。,例15. 43: #include class point int x,y; public: void show(); point() /定义构造函数 x=0;y=0;cout void point:show() coutx“:“yendl; void main() point p; /声明变量时自动调用构造函数。 p.show(); /变量作用域的结尾自动调用析构函数,程序运行结果: Constructor 0:0 Destructor 说明: 1、构造函数和析构函数不能使用return语句返回值。 3、构造函数可以重载,可以有形参;析构函数

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号