第3章类和对象剖析

上传人:今*** 文档编号:107874416 上传时间:2019-10-21 格式:PPT 页数:57 大小:440.50KB
返回 下载 相关 举报
第3章类和对象剖析_第1页
第1页 / 共57页
第3章类和对象剖析_第2页
第2页 / 共57页
第3章类和对象剖析_第3页
第3页 / 共57页
第3章类和对象剖析_第4页
第4页 / 共57页
第3章类和对象剖析_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《第3章类和对象剖析》由会员分享,可在线阅读,更多相关《第3章类和对象剖析(57页珍藏版)》请在金锄头文库上搜索。

1、第3章 类和对象,3.1 类 3.1.1 类的定义 3.1.2 类中成员函数的定义 3.2 对象 3.3 构造函数和析构函数 3.3.1 构造函数 3.3.2 析构函数 3.4 类的聚集对象成员 3.5 静态成员 3.6 指向类成员的指针 3.7 综合举例 习题,3.1 类,类是C+的数据抽象和封装机制,它描述了一组具有相同属性(数据成员)和行为特征(成员函数)的对象。 对象是类的实例。类是对一组具有相同特征的对象的抽象描述,所有这些对象都是这个类的实例。 在C+语言中,一个类的定义包含数据成员和成员函数两部分内容。数据成员定义该类对象的属性,不同对象的属性值可以不同;成员函数定义了该类对象的

2、操作即行为。,3.1.1类的定义,类由三部分组成:类名、数据成员和成员函数。 class 类名 private: / 私有数据成员和成员函数 public: / 公有数据成员和成员函数 protected: / 保护的数据成员和成员函数 ;,有关类定义的几点说明1:,(1) class是定义类的关键字,类名是一种标识符,必须符合C+标识符的命名规则。内是类的定义体部分,说明该类的成员,类的成员包括数据成员和成员函数。 (2) 类成员的三种访问控制权限: 类有三种访问控制权限,分别是private(私有成员)、public(公有成员)、protected(保护成员),在每一种访问控制权限下,均可

3、以定义数据成员和成员函数。,(3)类具有封装性,c+中的数据封装通过类来实现。外部不能随意访问说明为protected和private的成员。 (4)数据成员可以是任何数据类型,但是不能用自动(auto)、寄存器(register)或外部(extern)进行说明。 (5)注意在定义类时,不允许初始化数据成员。 (6)结构体和类的区别 C语言中的结构体只有数据成员,无函数成员。 (7)注意:在类定义时不要丢掉类定义的结束标志分号。,有关类定义的几点说明2:,类定义实例,例:定义日期类 class Tdate / 定义日期类 public: / 声明公有成员函数 void Set(int m,in

4、t d,int y); / 置日期值 int IsLeapYear(); / 判是否闰年 void Print(); / 输出日期值 private: / 定义私有数据成员 int month; int day; int year; ; / 类定义体的结束,3.1.2 类中成员函数的定义,类的成员函数有两种定义方法:外联定义和内联定义。 1. 外联成员函数(外联函数) 外联定义成员函数是指在类定义体中声明成员函数,而在类外定义成员函数。在类外定义成员函数的具体形式为: 返回值类型 类名:成员函数名(形式参数表) / 函数体 ,void Tdate:Set(int m,int d,int y)

5、/ 置日期值 month=m; day=d; year=y; int Tdate:IsLeapYear() / 判是否闰年 return (year%4=0 ,外联函数的定义,2. 内联成员函数(内联函数、内部函数、内置函数),可以将那些仅由少数几条简单代码组成,却在程序中被频繁调用的函数定义为内联成员函数。 内联成员函数有两种定义方法,一种方法是在类定义体内定义成员函数,另一种方法是使用inline关键字。,(1) 在类定义体内定义内联函数(隐式声明),class Tdate public: void Set(int m,int d,int y) / 置日期值 month=m; day=d;

6、 year=y; private: int month; int day; int year; ;,(2) 使用关键字inline定义内联成员函数(显式声明),inline void Tdate:Set(int m,int d,int y) month=m; day=d; year=y; 或 void inline Tdate:Set(int m,int d,int y) month=m; day=d; year=y; ,3.C+程序的多文件结构,一般一个较大的程序可以分为三个文件来存放: (1)类的定义文件(*.h) 将不同类的定义作为一个头文件来存放。内联函数原型和定义一般归入头文件。 (

7、2)类的实现文件(*.cpp) 不同类的实现部分单独组成一个文件(.cpp文件),用来存放类的成员函数的定义; (3)类的使用文件(*.cpp) 类的使用放在一个单独的.cpp文件中,该文件使用#include编译预处理命令包含类定义的头文件,在main()函数中实现类的应用。,多文件结构例题,例:显示一个点的X、Y坐标。 /文件1:类的声明文件point.h #include class point private: int x, y; public: point(int xx=0,int yy=0) x=xx; y=yy; point(point ,多文件结构例题,/文件2:类的实现文件p

8、oint.cpp /文件3:主文件fmian.cpp #include “point.h“ #include point:point(point ,多文件结构例题,3.2 对象,1.对象的基本概念 在面向对象方法开发的软件系统中,对象是类的实例,是属性和服务的封装体。 对象的属性用于描述对象的静态数据特征,对象的服务用于描述对象的动态特征。,2. 对象的定义,(1) 方法一:在定义类的同时直接定义 class location private: int x, y; public: void init(int x0, int y0); int Getx( ); int Gety( ); dot1

9、,dot2; (2) 方法二:在使用时定义对象 类名 标识符,.,标识符; 如:location dot1,dot2;,3成员的访问,(1) 通过对象调用成员 格式:对象名.公有成员 其中,“.”称为对象选择符,简称点运算符。 (2) 通过指向对象的指针调用成员 格式:指向对象的指针-公有成员 或 (*对象指针名).公有成员 (3) 通过对象的引用调用成员 格式:对象的引用.公有成员 需要注意,只有用public定义的公有成员才能使用圆点操作符访问。对象中的私有成员是类中隐藏的数据,类的外部不能访问对象的私有成员,只能通过该类的公有成员函数来访问它们。,class Myclock privat

10、e: int hour, minute, second; public: void init(); void updata(); void display(); ; Myclock clock, *pclock; / 定义对象clock和指向Myclock类 对象的指针pclock clock.init(); / 通过对象访问公有成员函数 pclock= / 错误,因为对象不能访问其私有成员,4. this指针,当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向接受该函数调用的对象的指针,在程序中可以使用关键字this来引用该指针。 void Tdate:set(int m,

11、int d,int y) / 置日期值 month=m; day=d; year=y; 或 void Tdate:set(int m,int d,int y) / 置日期值 this-month=m; this-day=d; this-year=y; 使用this指针,保证了每个对象可以拥有不同的数据成员,但处理这些数据成员的代码可以被所有的对象共享。,5.带默认参数的成员函数和重载成员函数,同普通函数一样,类的成员函数也可以是带默认值的函数,其调用规则同普通函数。成员函数也可以是重载函数,类的成员函数的重载与全局函数的重载方法相同。 【例3.4】带默认参数的成员函数。 【例3.5】重载成员函

12、数。,例3.4带默认参数的成员函数,#include void main() class Tdate public: Tdate a,b,c; void Set(int m=5,int d=16,int y=1991) a.Set(4,12,1996); b.Set(3); month=m; day=d; year=y; c.Set(8,10); a.Print(); void Print() / 输出日期值 b.Print(); c.Print(); coutmonth”/”day”/”yearendl; private: int month; int day; int year; ;,例3

13、.5 重载成员函数,#include void main() class cube cube cube1; coutcube1.volume(10,20)endl; public: coutcube1.volume(10,20,30)endl; int volume(int ht,int wd) return ht*wd; int volume(int ht,int wd,int dp) height=ht; width=wd; depth=dp; return height*width*depth; private: int height,width,depth; ;,3.3 构造函数和析构

14、函数,当建立一个对象时,对象的状态(数据成员的取值)是不确定的。C+有一个称为构造函数的特殊成员函数,它可自动进行对象的初始化。而析构函数在对象撤消时执行清理任务,进行善后处理。 构造函数和析构函数是类中两个特殊的成员函数,具有普通成员函数的许多共同特性,但还具有一些独特的特性。,3.3.1 构造函数,在使用对象前,对象的数据成员一定要初始化。对对象初始化有以下两种方法: 类中提供一个普通成员函数来初始化,但是会造成使用上的不便(使用对象前必须显式调用该函数)和不安全(未调用初始化函数就使用对象)。 使用构造函数对对象进行初始化。,1. 构造函数(constructor),构造函数是一个与类同名,没有返回值的特殊成员函数。一般用于初始化类的数据成员,每当创建一个对象时(包括使用new动态创建对象),编译系统就自动调用构造函数。 构造函数可在类外定义,也可作为内联函数在类内定义。 构造函数的声明格式为:() 构造函数的定义格式为:类名:()

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

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

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