(中职)Visual C++程序设计基础(中职)Flash 8.0基础第7章 类与对象ppt课件.ppt
《(中职)Visual C++程序设计基础(中职)Flash 8.0基础第7章 类与对象ppt课件.ppt》由会员分享,可在线阅读,更多相关《(中职)Visual C++程序设计基础(中职)Flash 8.0基础第7章 类与对象ppt课件.ppt(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、(中职)Visual C+程序设计基础(中职)Flash 8.0基础第7章 类与对象ppt课件第第7章章 类与对象类与对象 7.1 类类7.2 对象对象 7.3 构造函数与析构函数构造函数与析构函数7.4 类与对象的进一步讨论类与对象的进一步讨论7.5 类的友元类的友元7.6 类模板类模板7.7 继承与派生继承与派生7.8 虚函数虚函数7.9 运算符重载运算符重载 7.1 类类 类类是是对对一一组组客客观观对对象象的的抽抽象象,它它将将该该组组对对象象所所具具有有的的共共同同特特征征(包包括括结结构构特特征征和和行行为为特特征征)进进行行归归纳纳抽抽象象,以以说说明明该该组组对对象象的的性性质
2、质和和能能力力。因因此此,一一个个类类至至少少包包含含以以下下两两个个方方面面的的描描述述:类类所所有有实实例例共共同同具具有有的的属属性性或或结结构构特特征征,称称为为类类的的数数据据成成员员;类类所所有有实例共同具有的操作、行为或方法,称为类的成员函数。实例共同具有的操作、行为或方法,称为类的成员函数。在在C+中,类是一种数据类型,与结构体有很多相似之处,中,类是一种数据类型,与结构体有很多相似之处,类可以看作是在传统意义上的结构体上又加上了成员函数的一种类可以看作是在传统意义上的结构体上又加上了成员函数的一种数据类型。同结构体一样,在使用类之前必须要定义类。类的定数据类型。同结构体一样,
3、在使用类之前必须要定义类。类的定义可看作由说明部分和实现部分两部分来组成的。义可看作由说明部分和实现部分两部分来组成的。7.1.1 类的定义类的定义 说明部分用来说明该类中的成员,包括数据成员和成员函数的说明。成员函数是用来对数据成员进行操作的,又称为方法,实现部分是用来对成员函数的定义。1类定义的说明部分类定义的说明部分 class 类名称类名称 public:公有数据成员和成员函数公有数据成员和成员函数 protected:保护数据成员和成员函数保护数据成员和成员函数 private:私有数据成员和成员函数私有数据成员和成员函数 ;公有类型(public)公有成员用关键字public声明,
4、它们是类的外部接口,任何外部访问都必须通过这个接口来进行。私有类型(private)私有成员用关键字private声明。如果私有成员紧接着类名称声明,私有关键字private可以省略。私有成员完全隐藏在类中,实现了访问权限的有效控制。保护类型(protected)保护成员用protected声明,它与私有成员基本相似,但它对类的派生类有影响。它除了可以被本类中的成员函数访问外,还可以被本类的派生类的成员函数访问。其中class是定义类的关键字;类名称是标识符,用于惟一标识一个类,一般以“C”开头,以区别于其他标识符;一对大括号内是对类的说明,说明该类的所有成员。类的成员分为数据成员和成员函数,
5、分别描述类所表达的问题属性和行为,是问题特性不可分割的两个方面。2类定义的实现部分类定义的实现部分 类定义的实现部分就是对类中成员函数的定义。类的成员函数描述类的行为,又叫“方法”,是程序算法的实现部分,是对封装的数据进行操作的主要途径。在类定义的说明部分给出了成员函数的原型声明,说明函数返回值类型、函数名和函数的参数表,在类声明之外给出函数的具体实现,这是多数成员函数的定义方法。与普通函数不同的是,类外定义成员函数时要指明其所属类的名称,具体形式为:返回值类型返回值类型 类名类名:函数成员名函数成员名(参数表参数表)函数体函数体 注意,在类声明外定义成员函数的实现时,必须在成员函数名前加上所
6、属类名和作用域操作符“:”,从而说明该函数所属的类。7.1.2 类的成员函数类的成员函数 将成员函数声明为内联函数有两种方式:隐式声明和显式声明。如果将成员函数的函数体直接放在类定义体内,则该成员函数即为内联函数,这种方法称为隐式声明。为了提高类声明的可读性,一般将函数定义写在类声明体外,而采用关键字inline显式声明其为内联函数。显示声明写在类声明体外的内联成员函数有两种方式,一种是在类声明体内的该函数的原型声明前加关键字inline,或者在类声明体外定义函数时,在函数返回值类型前面加上inline,在类内定义的函数被看作内联函数(inline function),而在类外部定义的函数默认
7、情况下都是非内联函数。内联成员函数和普通内联函数相同,在编译时编译系统会将函数体插入到每个调用它的地方,这样可以减少函数调用时的时间开销,提高执行效率;缺点是增加了程序的代码长度;所以,一般把相对简单的成员函数声明为内联函数,而把较复杂的函数定义为非内联函数。1内联成员函数内联成员函数 inline void CDate:ShowDate()coutYear/Month/Dayendl;用关键字用关键字inline将成员函数将成员函数ShowDate()显式声明为内联函数显式声明为内联函数,与隐式声明的效果完全相同。class CDate public:void SetDate(int y,i
8、nt m,int d);/非内联成员函数 void ShowDate()/内联成员函数 coutYear/Month/Dayendl;private:int Year,Month,Day;隐式声明隐式声明 类的成员函数也可以带有缺省参数值,其调用规则同普通函数相同。声明成员函数带有的缺省参数值有两种方式,一种方式在类声明成员函数带有的缺省参数值有两种方式,一种方式在类中声明该成员函数时给出缺省参数值,如:中声明该成员函数时给出缺省参数值,如:void SetDate(int y=2008,int m=1,int d=1);2带缺省参数的成员函数带缺省参数的成员函数另一种方式是在函数定义中给出缺
9、省的参数值,如:另一种方式是在函数定义中给出缺省的参数值,如:void CDate:SetDate(int y=2008,int m=1,int d=1)Year=y;Month=m;Day=d;void main()Date Date1,Date2;Date1.SetDate();Date2.SetDate(2008,8,24);Date1.ShowDate();Date2.ShowDate();调用这个函数时不给出实参,就可以把日期设置为调用这个函数时不给出实参,就可以把日期设置为2008/1/1 函数重载是指同一个函数名对应着多个函数实现。在C+中,函数重载允许同一作用域内的同一个函数名
10、可以声明多个函数,它们可以完成不同的功能,可以带不同个数、不同类型的参数。两个函数成为重载函数,必两个函数成为重载函数,必须具有如下特征:函数名相同,须具有如下特征:函数名相同,函数的作用域相同,函数的参数函数的作用域相同,函数的参数个数不同或参数类型不完全相同。个数不同或参数类型不完全相同。不仅可以在类的成员函数上不仅可以在类的成员函数上实现重载,在构造函数上也可以实现重载,在构造函数上也可以实现函数的重载,而且构造函数实现函数的重载,而且构造函数的重载使得我们可以用多种方式的重载使得我们可以用多种方式来创建对象。来创建对象。3成员函数重载成员函数重载 class My_class publ
11、ic:int abs(int x);double abs(double x);int My_class:abs(int x)return x0?x:x;double My_class:abs(double x)return xShowDate();tDate.ShowDate();在定义了在定义了CDate类的对象后,就类的对象后,就可以访问其公有成员了可以访问其公有成员了 注意:注意:在类的外部只能访问类的公有成员,不能访问类的私有成员和保护成员;在类的内部,所有成员之间都可以通过成员名直接访问,这就实现了访问的有效控制。7.3 构造函数与析构函数构造函数与析构函数 构造函数的作用就是在对象
12、创建时利用特定的值构造对象,构造函数的作用就是在对象创建时利用特定的值构造对象,将对象初始化为一个特定的状态,使此对象具有区别于彼对象的将对象初始化为一个特定的状态,使此对象具有区别于彼对象的特征。构造函数完成的是从一般到具体的过程,它在对象被创建特征。构造函数完成的是从一般到具体的过程,它在对象被创建的时候由系统自动调用。的时候由系统自动调用。构造函数也是类的一个成员函数,除了具有一般成员函数的构造函数也是类的一个成员函数,除了具有一般成员函数的特征之外,还有一些特殊的性质。构造函数的函数名与类名相同,特征之外,还有一些特殊的性质。构造函数的函数名与类名相同,而且它没有返回值,不能有任何返回
13、类型,也不能使用而且它没有返回值,不能有任何返回类型,也不能使用void,但,但在构造函数体内可有无值的在构造函数体内可有无值的return语句。构造函数通常被定义为语句。构造函数通常被定义为公有函数,但是,除了在创建对象时由系统自动调用之外,其它公有函数,但是,除了在创建对象时由系统自动调用之外,其它任何过程都无法再调用到它,也就是只能一次性地影响对象数据任何过程都无法再调用到它,也就是只能一次性地影响对象数据成员的初值。成员的初值。7.3.1 构造函数构造函数 定义构造函数使定义构造函数使CDate类的对象在生成时就获得一个缺省的日期值,类类的对象在生成时就获得一个缺省的日期值,类CDat
14、e的定的定义修改如下:义修改如下:class CDate public:CDate();/声明构造函数 CDate(int y,int m,int d);/声明重载构造函数 void SetDate(int y,int m,int d);void ShowDate();private:int Year,Month,Day;构造函数的实现如下:构造函数的实现如下:CDate:CDate()/构造函数的定义 Year=2008;Month=1;Day=1;CDate:CDate(int y,int m,int d)/重载的构造函数的定义 Year=y;Month=m;Day=d;7.3.2 析构函
15、数析构函数 类的另一个特殊的成员函数是析构函数,它在对象生存期类的另一个特殊的成员函数是析构函数,它在对象生存期即将结束的时刻由系统自动调用。它的作用与构造函数相反,即将结束的时刻由系统自动调用。它的作用与构造函数相反,它执行一些在对象撤消前必须执行的清理任务,例如释放由构它执行一些在对象撤消前必须执行的清理任务,例如释放由构造函数申请分配的内存等。造函数申请分配的内存等。析构函数的函数名也是固定的,就是在类名前边加一个析构函数的函数名也是固定的,就是在类名前边加一个“”字符做前缀就构成了析构函数的函数名。与构造函数相同,字符做前缀就构成了析构函数的函数名。与构造函数相同,析构函数也是类的一个
16、公有成员函数,被系统自动调用,而且析构函数也是类的一个公有成员函数,被系统自动调用,而且在定义析构函数时,同样不能指定任何的返回类型,也不能使在定义析构函数时,同样不能指定任何的返回类型,也不能使用用void,如果类中没声明析构函数,系统也会自动生成一个不,如果类中没声明析构函数,系统也会自动生成一个不做任何事情的缺省析构函数;与构造函数不同的是,构造函数做任何事情的缺省析构函数;与构造函数不同的是,构造函数可以重载,也可以带有缺省的参数值,而析构函数只能有一个,可以重载,也可以带有缺省的参数值,而析构函数只能有一个,且不能接受任何参数。且不能接受任何参数。#include class CAr
17、ray public:CArray(int size);/构造函数声明构造函数声明 CArray();/析构函数声明析构函数声明 int GetAt(int nIndex);void SetAt(int nIndex,int newElement);protected:int*m_Data;/存数组首地址存数组首地址 int m_Size;/数组中包含元素个数数组中包含元素个数;CArray:CArray(int size)/构造函数定义构造函数定义 coutConstruct the objectn;m_Data=new intsize;/申请内存空间申请内存空间 m_Size=size;/
18、设置数组元素个数设置数组元素个数CArray:CArray()/析构函数定义析构函数定义 coutDestruct the objectn;delete m_Data;/释放内存空间释放内存空间int CArray:GetAt(int nIndex)/获取数组元素的值获取数组元素的值 return m_DatanIndex;void CArray:SetAt(int nIndex,int newElement)/设置数组元素的值设置数组元素的值 m_DatanIndex=newElement;void main()CArray a(10);for(int i=0;i10;i+)a.SetAt(
19、i,i);for(i=0;i10;i+)coutai=a.GetAt(i)”形式进行访问:形式进行访问:Dates-ShowDate();(Dates+1)-ShowDate();若只有用户自定义的带有参数且无缺省值的构造函数,则若只有用户自定义的带有参数且无缺省值的构造函数,则必须在创建对象数组时使用构造函数进行初始化,其形式为:必须在创建对象数组时使用构造函数进行初始化,其形式为:类名类名 数组名数组名常量表达式常量表达式=类名类名(参数表参数表),类名类名(参数表参数表),类名类名(参数参数表表);2若类中只有需要参数的构造函数时若类中只有需要参数的构造函数时3若类的构造函数只需要若类的
20、构造函数只需要1个参数时个参数时7.5 类的友元类的友元 友元提供了不同类的成员函数之间、类的成员函数与一般函友元提供了不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。也就是说,通过友元,一个普通函数之间进行数据共享的机制。也就是说,通过友元,一个普通函数或者其它类的成员函数可以访问到封装于某一个类中的数据数或者其它类的成员函数可以访问到封装于某一个类中的数据 7.5.1 友元函数的定义及作用友元函数的定义及作用 友元函数是在类定义中用关键字友元函数是在类定义中用关键字friend声明的非成员函数。声明的非成员函数。注意,友元函数可以是一个普通的函数,也可以是其它类的成员注
21、意,友元函数可以是一个普通的函数,也可以是其它类的成员函数,它不是本类的成员函数,但是在它的函数体中可以通过对函数,它不是本类的成员函数,但是在它的函数体中可以通过对象使用本类的私有和保护成员。象使用本类的私有和保护成员。在在CCircle类定义体中声明友元函数时,只给出了友元函数原型,类定义体中声明友元函数时,只给出了友元函数原型,友元函数友元函数fErr的实现定义在类外。可以看到在友元函数中通过对象名直的实现定义在类外。可以看到在友元函数中通过对象名直接访问了接访问了CCircle类中的私有数据成员类中的私有数据成员R、X和和Y,这就是友元的关键所,这就是友元的关键所在。在。7.5.1 友
22、元函数的定义及作用友元函数的定义及作用class CCircle public:/外部接口 CCircle(int rr=10,int xx=0,int yy=0)R=rr;X=xx;Y=yy;int GetR()return R;int GetX()return X;int GetY()return Y;friend double fErr(CCircle&a,CCircle&b);/声明友元函数private:int R,X,Y;double fErr(CCircle&a,CCircle&b)double x=double(c1.X-c2.X);double y=double(c1.Y-c
23、2.Y);return(c1.R+c2.R)-(sqrt(x*x+y*y);通过友元类声明,友元类的成员函数可以通过对象名直接访问到通过友元类声明,友元类的成员函数可以通过对象名直接访问到隐藏的数据,达到高效协调工作的目的。在较为复杂的问题中,实现隐藏的数据,达到高效协调工作的目的。在较为复杂的问题中,实现不同类之间的数据共享,友元类的使用也是很必要的选择。不同类之间的数据共享,友元类的使用也是很必要的选择。7.5.2 友元类友元类 类也可以声明为另一个类的友元,称为友元类。一般的语法格式为:类也可以声明为另一个类的友元,称为友元类。一般的语法格式为:class B friend class
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中职Visual C+程序设计基础中职Flash 8.0基础第7章 类与对象ppt课件 Visual C+ 程序设计 基础 Flash 8.0 对象 ppt 课件
链接地址:https://www.taowenge.com/p-89966293.html
限制150内