C++程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目 教学课件 ppt 作者 姚琳 C++大学基础教程第8章

上传人:E**** 文档编号:89370844 上传时间:2019-05-24 格式:PPT 页数:101 大小:287KB
返回 下载 相关 举报
C++程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C++大学基础教程第8章_第1页
第1页 / 共101页
C++程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C++大学基础教程第8章_第2页
第2页 / 共101页
C++程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C++大学基础教程第8章_第3页
第3页 / 共101页
C++程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C++大学基础教程第8章_第4页
第4页 / 共101页
C++程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者  姚琳 C++大学基础教程第8章_第5页
第5页 / 共101页
点击查看更多>>
资源描述

《C++程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目 教学课件 ppt 作者 姚琳 C++大学基础教程第8章》由会员分享,可在线阅读,更多相关《C++程序设计 工业和信息化普通高等教育“十二五”规划教材立项项目 教学课件 ppt 作者 姚琳 C++大学基础教程第8章(101页珍藏版)》请在金锄头文库上搜索。

1、C+大学基础教程,第8章 类与对象,北京科技大学,-2-,类是实现C+面向对象程序设计的基础 面向对象程序设计的基本特点有:抽象、封装、继承和多态 类把数据和函数封装在一起,是C+封装的基本单元,-3-,8.1 类是一种数据类型 8.2 类的定义 8.3 对象的定义 8.4 类的成员函数 8.5 类成员的访问属性 8.6 对象的使用 8.8 析构函数 8.9 拷贝构造函数 8.10 浅拷贝与深拷贝 8.11 静态成员 8.12 友元 8.13 常对象 8.14 常成员 8.15 组合关系 8.16 类模板,第8章 类与对象,8.1 类是一种数据类型,-5-,8.1 类是一种数据类型,数据类型约

2、束了变量所能参加的运算范围。例如,整型变量可以进行取模“%”运算,而实型变量则不可以进行该运算; 数据类型限定了变量所能取到的数值范围。例如,整型变量可以取值为1,2, 100,,而不能取值3.1415这样的实型数。 在C+中,类实际上相当于一种用户自定义的数据类型,对象就是该数据类型的一个变量; 类-数据类型 对象-变量,8.2 类的定义,-7-,8.2 类的定义,一个类表示现实生活中的一类事物,比如“学生”. 事物有相应的特征或属性,它们就是类的成员数据; 事物可能有行为动作,也可能被某些行为动作所操作,这些都用函数来实现,是构成类的函数成员,或者叫成员函数。,-8-,举例:,class

3、Student /类的定义,即定义一种新的数据类型 private: int id; char20 name; int age; float score; public: void getscore(); void printstu(); ;,8.2 类的定义,-9-,举例:,void Student:printStudent() cout”id:”id”,” ”name :”name”,” ”sex :”sexendl ; ,8.2 类的定义,-10-,8.2 类的定义,类的声明具体说明类的组成,声明类的语法形式为: class 类的名称 public: 公有成员数据; 公有成员函数; pr

4、oteced: 保护成员数据; 保护成员函数; private: 私有成员数据; 私有成员函数; ;,-11-,其中,“成员”既可以是数据,也可以是函数。 成员数据的声明方式与一般变量相同。 成员函数是描述类的对象可以进行的操作,一般在类中声明原型,在类声明的外面定义函数的具体实现。,8.2 类的定义,-12-,类的成员函数描述的是类的行为或操作。函数的原型声明要在类的主体中,原型说明了函数的参数表和返回值类型。而函数的具体实现一般是写在类声明之外的。 在类的外部定义成员函数的语法形式为: 返回值类型 类名:成员函数名(参数表) 函数体 ,8.2 类的定义,8.3 对象的定义,-14-,定义一

5、个类后,只是有了描述该类事物的数据类型。当我们使用“类”这个数据类型定义一个变量时,就生成了一个该“类”的对象。对象有时又称为实例。 例如,Student stu(1,“wang”,M); 定义了一个对象名字为stu的Student类型的对象。,8.3 对象的定义,-15-,定义一个对象和定义一个一般变量相同。 定义变量时要分配存储空间,同样,定义一个对象时要分配存储空间,一个对象所占的内存空间是类的数据成员所占的空间总和。类的成员函数存放在代码区。 类的成员是抽象的,对象的成员才是具体的。类的数据成员都不会有具体的属性值。只有对象的成员才会有具体的属性值。,8.3 对象的定义,-16-,8.

6、3 对象的定义,类中成员互访 直接使用成员名 类外访问 使用“对象名.成员名”方式访问 public 属性的成员,8.4 类的成员函数,-18-,类的成员函数可以有多种特殊形式,包括带默认参数值的成员函数、内联成员函数和重载成员函数。,8.4 类的成员函数,-19-,class Student public: Student(int pId, char* pName, char pSex); / 构造函数 void printStudent(); / printStudent函数声明 void setNationality(char* pNationality); / 设置国籍函数 priva

7、te: int id; / 定义学号变量 char* name; / 定义姓名字符指针变量 char sex; / 定义性别变量 char* nationality; / 定义国籍字符指针变量 ;,8.4.1 带默认参数值的成员函数,-20-,void Student:setNationality(char* pNationality=“China“) nationality = new charstrlen(pNationality)+1; if(nationality != 0) strcpy(nationality,pNationality); 调用: Student stu(1,“wa

8、ng“,M); stu.setNationality();,8.4.1 带默认参数值的成员函数,-21-,如果在类的内部定义成员函数的具体实现,则该成员函数为内联成员函数。 函数定义时没有任何的附加说明,所以称为隐式声明的内联成员。,8.4.2 内联成员函数,-22-,8.4.2 内联成员函数,在类中说明原形,可以在类外给出函数体实现,并在函数名前使用类名加以限定。也可以直接在类中给出函数体,形成内联成员函数。 在类中声明内联成员函数的方式: 将函数体放在类的声明中(隐式)。 使用inline关键字(显示)。,-23-,内联成员函数举例(一),class Point public: void

9、Init(int initX,int initY) X=initX; Y=initY; int GetX( ) return X; int GetY( ) return Y; private: int X,Y; ;,-24-,内联成员函数举例(二),class Point public: void Init(int initX,int initY); int GetX( ); int GetY( ); private: int X,Y; ;,-25-,inline void Point:Init(int initX,int initY) X=initX; Y=initY; inline int

10、 Point:GetX( ) return X; inline int Point:GetY( ) return Y; ,-26-,class Student public: void printStudent(); / 打印所有信息 / 根据flag取值打印不同信息 / flag=1, 打印id / flag=2, 打印name / flag=3, 打印sex / flag=4, 打印nationality void printStudent(int flag); private: ;,8.4.3 重载成员函数,8.5 类成员的访问属性,-28-,关键字public、protected、pr

11、ivate说明类成员的访问控制属性。私有(private)成员只允许本类的成员函数来访问;公有(public)成员是类对外的接口,在类声明和类(函数)实现之后,外部对象可以访问公有成员。保护型(protected)成员的可访问性和私有成员的性质相似,与继承有关。,8.5 类成员的访问属性,-29-,关于访问控制属性,注意: 在类声明中,三种访问控制属性,可以按任意次序出现,也可以不出现。public等关键字也可以多次出现,但是一个成员只能具有一种访问控制属性。 如果不写访问控制属性关键字,默认的是private。在书写时通常习惯将public放在最前面,这样便于阅读,因为它们是外部访问时所要了

12、解的。 一般情况下,一个类的数据成员应该声明为私有成员,这样封装性较好。一个类应该有一些公有的函数成员,作为对外的接口,否则别的代码无法访问类,8.5 类成员的访问属性,-30-,8.5 类成员的访问属性,8.6 对象的使用,-32-,8.6 对象的使用,对象是类的一个具体的实例,类和对象的关系相当于普遍与特殊的关系。在C+中,类是一个自定义的数据类型,对象是该数据类型的一个变量。 所以,可以定义一个全局的对象,也可以在函数体中定义一个局部的对象,或者动态地从堆中申请空间来创建一个对象,还可以定义对象数组,以及使用对象作为函数的参数与返回值。,-33-,8.6.1 对象指针,声明对象指针的一般

13、语法形式为: 类名* 对象指针名; 使用对象指针访问对象的成员,语法形式为: 对象指针名-公有成员; 例如: Clock c; Clock* pc1=new Clock; Clock* pc2=,-34-,8.6.2 this指针,问:一个类中所有对象调用的成员函数都执行同一段代码。那么,成员函数又是怎么识别当前是那个对象在访问呢? 答:this指针指出了成员函数当前所操作的数据所属的对象。不同的对象调用成员函数时,this指针将指向不同的对象,也就可以访问不同对象的数据成员。,-35-,8.6.3 对象数组,对象数组的元素是对象,不仅具有数据成员,而且还有函数成员,可以通过数组元素调用成员函

14、数。 例:student stu10;,-36-,8.6.4 对象用做函数的参数和返回值,可以将对象作为参数传递给一个函数或从函数返回一个对象。 直接用对象作为参数,调用函数时,进行值传递,实参的值要复制给形参,如果类的数据成员较多时,需要一一复制. 但是,这种参数传递方式效率不高,可以使用对象指针或对象引用方式来传递函数参数。,8.7 构造函数,-38-,8.7 构造函数,构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。 在对象创建时由系统自动调用。 如果程序中未声明,则系统自动产生出一个缺省形式的构造函数 允许为内联函数、重载函数、带缺省形参值的函数

15、,-39-,8.7 构造函数,class Clock public: Clock (int NewH, int NewM, int NewS);/构造函数 Clock () /缺省构造函数 void SetTime(int NewH, int NewM, int NewS); void ShowTime( ); private: int Hour,Minute,Second; ;,-40-,构造函数的实现: Clock:Clock(int H, int M, int S) Hour=H; Minute=M; Second=S; 建立对象时构造函数的作用: void main( ) Clock

16、c(0,0,0); /隐含调用构造函数,将初始值作为实参。 c.ShowTime( ); ,-41-,8.7 构造函数,每个对象区别于其他对象的地方主要有两个,外在的区别就是对象的标识符,即对象的名称,而内在的区别就是对象自身的属性值,即数据成员的值。 在定义一个对象的时候要给它分配存储空间,也可以同时给它的数据成员赋初值,称为对象的初始化。 C+程序中的对象初始化工作由一个特殊的成员函数来完成,就是构造函数。 因为不同类型的对象的初始化工作是不一样的,因此构造函数从属于某个类的,即每个类都要定义它自己的构造函数,它是类的成员函数。,-42-,定义构造函数的一般形式为: class 类名 public: 类名(形参表); /构造函数的原型 /类的

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

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

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