面向对象的程序设计语言——C++ 教学课件 ppt 作者 陈志泊 王春玲 第3章

上传人:E**** 文档编号:89457174 上传时间:2019-05-25 格式:PPT 页数:171 大小:902KB
返回 下载 相关 举报
面向对象的程序设计语言——C++ 教学课件 ppt 作者  陈志泊 王春玲 第3章_第1页
第1页 / 共171页
面向对象的程序设计语言——C++ 教学课件 ppt 作者  陈志泊 王春玲 第3章_第2页
第2页 / 共171页
面向对象的程序设计语言——C++ 教学课件 ppt 作者  陈志泊 王春玲 第3章_第3页
第3页 / 共171页
面向对象的程序设计语言——C++ 教学课件 ppt 作者  陈志泊 王春玲 第3章_第4页
第4页 / 共171页
面向对象的程序设计语言——C++ 教学课件 ppt 作者  陈志泊 王春玲 第3章_第5页
第5页 / 共171页
点击查看更多>>
资源描述

《面向对象的程序设计语言——C++ 教学课件 ppt 作者 陈志泊 王春玲 第3章》由会员分享,可在线阅读,更多相关《面向对象的程序设计语言——C++ 教学课件 ppt 作者 陈志泊 王春玲 第3章(171页珍藏版)》请在金锄头文库上搜索。

1、1,第三章面向对象的程序设计,本章导读 掌握类与对象的概念,类与对象的定义方法及二者间的区别。 掌握类的成员函数的定义方法、保存方法及调用方法。掌握类中成员的访问机制和方法。 了解对象的作用域和生存期。 理解并掌握构造函数、析构函数、拷贝构造函数、默认构造函数和缺省参数的构造函数的含义、定义方法以及在对象的构造和撤消中的作用。 理解并掌握当一个类的对象作为另一个类的数据成员时,利用初始化表调用构造函数的方法、构造函数的执行顺序。,2,本章导读,理解继承的概念和意义,理解单一继承、多重继承。理解并掌握派生类构造函数的编写要求,以及派生类对象的构造过程和机理。 掌握虚函数和多态性的概念,掌握虚函数

2、的定义方法、调用方法及其在实现多态性方面所起到的作用。了解纯虚函数与抽象基类的概念。 了解类的静态成员(静态数据成员和静态成员函数)的概念、定义方法及其作用。 了解友元函数与友元类的概念、定义方法及其作用。 了解运算符重载及在程序中实现运算符重载的方法。 了解模板的概念,在程序中如何定义类模板和函数模板。,3,3.1 类与对象的定义,类和对象是面向对象程序设计(OOP)的两个最基本概念。所谓对象就是客观事物在计算机中的抽象描述;类是对具有相似属性和行为的一组对象的统一描述。 3.1.1 类的定义 C+的类是在结构体的基础上扩充而来的。类是把各种不同类型的数据(称为数据成员)和对数据的操作(成员

3、函数)组织在一起而形成的用户自定义的数据类型。 C+中,类定义包括类说明和类实现两大部分。说明部分提供了对该类所有数据成员和成员函数的描述,而实现部分提供了所有成员函数的实现代码。,4,3.1 类与对象的定义,类定义的一般形式为: class 类名 private: 数据成员或成员函数 protected: 数据成员或成员函数 public: 数据成员或成员函数 ; ,5,3.1 类与对象的定义,说明: 1. class是定义类的关键字,类名由用户自己定名,必须是C+的有效标识符,但一般首字母大写。 2. 大括号的部分是类的成员(数据成员和函数成员),它们分成三部分,分别由private、pu

4、blic、proctected三个关键字后跟冒号来指定。这三部分可以任何顺序出现,且在一个类的定义中,这三部分并非必须同时出现。 (1)如果数据成员或成员函数在类的private部分,那么在类之外是不能存取的,只有类中的成员函数才能存取private的数据成员和成员函数。 (2)在一个类的public部分说明的数据成员或成员函数可被程序中的任何函数或语句存取,public成员多为成员函数,用来提供一个与外界的接口,外界只有通过这个接口才可以实现对private成员的存取。,6,3.1 类与对象的定义,(3)在类的protected部分说明的数据成员和成员函数是不能在类之外存取的,只有类的成员函

5、数及其子类(派生类)可以存取protected的成员。 (4)当定义类时,当未指明成员是哪部分时,默认是属于private成员,但一般不要采用默认形式。 如:下例中定义描述图书的类定义 class Record private: /private成员 char bookname20; /数据成员bookname, / 用于表示图书的名称 int number; /数据成员number,表示图书编号,7,3.1 类与对象的定义,public: /public成员 void regist(char *a,int b); /成员函数regist,用于给 /各数据成员赋值 void show(); /

6、成员函数show,显示各数据成员的值 ; 要特别注意,在类的定义中,类的说明部分的右边大括号后面必须有一 “;”. 根据类的定义,可看出:类是实现封装的工具,所谓封装就是将类的成员按使用或存取的方式分类,有条件地限制对类成员的使用,而封装是通过public和private与成员函数实现的。private的成员构成类的内部状态,public的成员则构成与外界通信的接口,通过public的成员函数来使用private的数据成员,从而在C+中实现了封装。,8,3.1 类与对象的定义,3.1.2 成员函数的定义 类中的成员函数可以在以下两处定义: (1)将成员函数的定义直接写在类中: 如:对于前面定义

7、的图书类Record来说,其成员函数regist和show的定义可直接写在类的定义体中。 class Record private: char bookname20; int number;,9,3.1 类与对象的定义,public: void regist(char *a,int b) /成员函数regist()的定义 strcpy(bookname,a); /给数据成员bookname赋值 number=b; /给数据成员number赋值 void show() /成员函数show()的定义 cout”名称:”booknameendl; cout”号码:”numberendl; ;,10,

8、3.1 类与对象的定义,在类中直接定义成员函数的情况一般适合于成员函数规模较小的情况,也就是说它们一般为内联函数,即使没有明确用inline关键字。 (2)在类的定义体中只写出成员函数的原型说明,而成员函数的定义写在类的定义之后,这种情况比较适合于成员函数体较大的情况,但这时要求在定义成员函数时,在函数的名称之前加上其所属性类名及作用域运算符“:” 。 定义成员函数的一般类型为: 返回值类型 类名:成员函数名(参数说明) 类体 ,11,3.1 类与对象的定义,此处的:符号叫作用域运算符,用它来指明哪个函数属于哪个类或哪个数据属于哪个类,所以使用类中成员的全名是:类名:成员名。 而如果没有类名,

9、则为全局数据或全局函数(非成员函数),也就是说类名是其成员名的一部分。 如 class Record private: char bookname20; int number; public: void regist(char *a,int b);/成员函数regist的原型 void show(); /成员函数show的原型 ; /定义图书类Record,12,3.1 类与对象的定义,void Record:regist(char *a,int b) /regist()是类Record的 /成员函数 strcpy(bookname,a); number=b; void Record:show

10、() / show()是类Record的成员函数 cout”名称:”booknameendl; cout”号码:”numberendl; 此外,目前开发程序的通常将类的定义写在一个头文件(.h文件)中,成员函数的定义写在一个程序文件(.cpp文件)中,这样,就相当于把类的定义(头文件)看成是类的外部接口,类的成员函数的定义看成类的内,13,3.1 类与对象的定义,部实现。如:对上例可改成将类的定义体写在myapp.h文件中,而成员函数的定义体写在另外一个文件myapp.cpp中: /myapp.h文件 class Record private: char bookname20; int num

11、ber; public: void regist(char *a,int b); void show(); ;,14,3.1 类与对象的定义,/myapp.cpp文件 #include “iostream.h” #include “myapp.h” /一定不要忘记嵌入该头文件 void record:regist(char *a,int b) strcpy(bookname,a); number=b; void record:show() cout”名称:”booknameendl; cout”号码:”numberendl; ,15,3.1 类与对象的定义,3.1.3 对象的定义 对象是类的实

12、例,定义对象的一般格式为: 类名 变量名表; 或 类名 对象名; 如:上例中已定义了类Record,则: Record book1,book2; /此处的book1,book2就是Record /类型,也就是类的两个对象 类是抽象的概念,而对象是具体的,类只是一种数据类型,而对象是属于该类(数据类型)的一个变量,占用了各自的存储单元,每个对象各自具有了该类的一套数据成员(静态成员除外),而所有成员函数是所有对象共有的。每个对象的函数成员都通过指针指向同一个代码空间。,16,3.1 类与对象的定义,3.1.4 访问对象的成员 访问对象的成员包括读写对象的数据成员和调用它的成员函数,其访问格式是:

13、 对象名.成员名 如上例中,对象的主函数如下: void main() Record book1,book2; /定义对象book1和book2 /调用成员函数regist,给book1的两个数据成员 /bookname和number赋值 book1.regist(“C+编程教程”, 1001); /调用成员函数regist,给book2的两个数据成员赋值 book2.regist(“C+语言参考”, 1002);,17,3.1 类与对象的定义,/调用成员函数show,显示book1对象的数据成员 /bookname和number的值 book1.show(); /调用成员函数show,显示b

14、ook2对象的数据成员 /bookname和number的值 book2.show(); 如改为下面的代码,则错误: void main() Record book1,book2; /由于bookname和number是类Record的私有成员,在类外/不能直接使用,18,3.1 类与对象的定义,strcpy(book1.bookname,“C+编程教程”); book1.number=1001; strcpy(book2.bookname,“C+语言参考”); book2.number=1002; book1.show(); book2.show(); 注意: 1. 对于类的私有成员,只能通

15、过其成员函数来访问,不能在类外对私有成员访问。,19,3.1 类与对象的定义,2. 调用成员函数时要在函数名之前加上对象名和“.“即可,即先指明对象,再指明成员。也可以采用指向对象的指针来访问,但要在函数名前加上指针变量名和“-”。 3. 任何对对象私有数据的访问都必须通过向对象发送消息来实现,而且所发送的消息还必须是该对象能够识别和接受的。在C+中,消息发送正是通过公有成员函数的调用来实现的。由于类接口隐藏了对象的内部细节,用户只能通过类接口访问对象,因此,在类设计中必须提供足够的公有接口以捕获对象的全部行为,这正是类设计中的一个最基本的要求。 4. 上例中,在对象调用book1.regis

16、t(“C+编程教程”, 1001);时,成员函数regist除了接受两个实参外,还接,20,3.1 类与对象的定义,受了一个对象book1的地址,这个地址被一个隐含的形参this指针所获取,它等同于执行this= 通过以上手段就确保了不同对象调用成员函数时访问的是不同对象的数据,而它们之间没有干扰。,21,3.1 类与对象的定义,3.1.5 对象赋值语句 对于同一个类生成的两个对象,可以进行赋值,其功能是将一个对象的数据成员赋值到另一个对象中去,赋值语句的左右两边各是一个对象名: 【例3-1】 对于类example的两个对象obj1和obj2,让obj2的成员数据的值等于obj1的成员数据的值(假定obj1的成员数据num已经存有数据215)。,22,3.1 类与对象的定义,# inclu

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

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

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