书签 分享 收藏 举报 版权申诉 / 179
上传文档赚钱

类型C++面向对象程序设计第三章类与对象课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:2921351
  • 上传时间:2022-06-11
  • 格式:PPT
  • 页数:179
  • 大小:1.25MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《C++面向对象程序设计第三章类与对象课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    C+ 面向 对象 程序设计 第三 课件
    资源描述:

    1、学习目标学习目标 (1 1)理解类的概念,掌握类的定义方法)理解类的概念,掌握类的定义方法(2 2)理解对象与类的关系,掌握对象的创建和使用方法)理解对象与类的关系,掌握对象的创建和使用方法(3 3)掌握构造函数、析构函数的概念和使用方法)掌握构造函数、析构函数的概念和使用方法(4 4)掌握拷贝构造函数的使用方法)掌握拷贝构造函数的使用方法(5 5)掌握对象数组和对象指针的特点和使用方法)掌握对象数组和对象指针的特点和使用方法(6 6)掌握函数调用中参数的传递方式)掌握函数调用中参数的传递方式(7 7)理解类的组合的特点)理解类的组合的特点3.1 3.1 类类和对象的概念和对象的概念 类是对类

    2、是对一组具有共同属性特征和行为特征的实体一组具有共同属性特征和行为特征的实体(对象)的抽象,它将相关数据及对这些数据的操作(对象)的抽象,它将相关数据及对这些数据的操作组合在一起组合在一起。 对象对象是封装了数据和可以施加在这些数据上的操是封装了数据和可以施加在这些数据上的操作的封装体,它是类的实际变量,即类的实例。作的封装体,它是类的实际变量,即类的实例。3.1.1类的基本概念 类类(classclass)是面向对象系统中最基本的组)是面向对象系统中最基本的组成元素,是一种自定义数据类型。在成元素,是一种自定义数据类型。在C+C+中,类是中,类是一些具有相同属性和行为的对象的抽象。一些具有相

    3、同属性和行为的对象的抽象。3.1.2对象的基本概念 对象对象是某个特定类所描述的实例。现实世界是某个特定类所描述的实例。现实世界中的任何一种事物都可以看成一个对象中的任何一种事物都可以看成一个对象(Object)(Object),即万物皆对象。即万物皆对象。3.2 3.2 类的定义类的定义 类类的定义包括两部分:类头和类体的定义包括两部分:类头和类体。 类类头由关键字头由关键字“classclass”及其后面的类名构成及其后面的类名构成; 类类体用于对类的数据成员和成员函数进行声明,体用于对类的数据成员和成员函数进行声明,并指定相应成员的访问级别并指定相应成员的访问级别。3.2.1类的定义格式

    4、class 类名类名 private: 数据成员或成员函数数据成员或成员函数 protected: 数据成员或成员函数数据成员或成员函数 public: 数据成员或成员函数数据成员或成员函数;说明:说明: (1 1)classclass是声明类的关键字,是声明类的关键字,classclass后跟类名。类名后跟类名。类名的首字符通常采用大写字母。的首字符通常采用大写字母。 (2 2)类的成员包括数据成员和成员函数两类。)类的成员包括数据成员和成员函数两类。 (3 3)类声明中的)类声明中的privateprivate、protectedprotected和和publicpublic关键字关键字称

    5、为访问权限符,它规定了类中成员的访问属性。称为访问权限符,它规定了类中成员的访问属性。 (4 4)在)在C+C+中,由于类是一种数据类型,系统不会为中,由于类是一种数据类型,系统不会为其分配存储空间,所以不能在类声明中给数据成员赋初值。其分配存储空间,所以不能在类声明中给数据成员赋初值。 (5 5)类声明完成后一定要以)类声明完成后一定要以“; ;”结束。结束。 【例【例3-13-1】声明一个学生类】声明一个学生类 分析:每个学生都有学号、姓名和性别;对分析:每个学生都有学号、姓名和性别;对于学生的基本操作有输入、输出信息等。于学生的基本操作有输入、输出信息等。class Student /声

    6、明类 private: /访问权限:私有成员 char studentNo10; /属性,数据成员,表示学号 char studentName20; /属性,数据成员,表示姓名 char studentSex6; /属性,数据成员,表示性别 public: /访问权限:公有成员 Student(); /行为,成员函数的原型声明,表示构造函数 void input(); void print(); ; /类声明结束3.2.2类的成员 对于对于C+C+,类中共有两类成员,类中共有两类成员: 1 1)代表代表对象属性的数据对象属性的数据成员成员 2 2)代表代表实现对象行为的成员实现对象行为的成员函

    7、数函数3.2.3类成员访问控制权限 publicpublic(公有类型)、(公有类型)、privateprivate(私有类型)和(私有类型)和protectedprotected(保护类型)(保护类型)。 1 1、publicpublic(公有类型)(公有类型) public public声明成员为公有成员。具有这个访问控制声明成员为公有成员。具有这个访问控制级别的成员是完全公开的,即该成员不但可以被它所级别的成员是完全公开的,即该成员不但可以被它所在类的成员函数及该类的友元函数访问,而且也可以在类的成员函数及该类的友元函数访问,而且也可以被和该类对象处在同一作用域内的任何函数访问。被和该类

    8、对象处在同一作用域内的任何函数访问。 【例【例3-23-2】具有】具有publicpublic访问权限的成员的应用访问权限的成员的应用#include #include stdafx.hstdafx.h # #includeiostreamincludeiostream using namespace using namespace stdstd; ;class class LimitLimitpublicpublic: : /声明类的公有成员声明类的公有成员 char name30;char name30; void accept()void accept() coutcoutn Enter

    9、 your name; name; /类的成员函数访问类类的成员函数访问类的的公公有有数据成员数据成员 coutcoutn Your name is:namen Your name is:nameendlendl; ; ;void main()void main() Limit Limit c; c; /定义类的对象定义类的对象 c.acceptc.accept(); (); /通过对象访问类的公有成员函数通过对象访问类的公有成员函数 coutcoutc.namec.nameendlendl; ; /通过对象访问类的公有数据成员通过对象访问类的公有数据成员说明:说明: (1 1)在一个项目中的

    10、每一个)在一个项目中的每一个. .cppcpp文件都包含有大量文件都包含有大量的相同的的相同的MFCMFC(Microsoft Foundation Class Library)标准标准头文件,这些头文件,这些头文件头文件一般都不会改变,并且一般都不会改变,并且都都非常大,即非常大,即使有一个快速的处理程序,完成其编译也要花费相当长的使有一个快速的处理程序,完成其编译也要花费相当长的时间时间。因此因此,对这些头文件进行预先编译,以后该工程编,对这些头文件进行预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结果,译时,不再编译这部分头文件,仅仅使用预编译的结果,就可以节省大量的

    11、编译时间。就可以节省大量的编译时间。“stdafx.hstdafx.h”文件中就包含文件中就包含了这些必要的标准头文件。了这些必要的标准头文件。#include #include stdafx.hstdafx.h 的作用的作用就是令编译器编译出一个就是令编译器编译出一个stdafx.objstdafx.obj预编译头文件。因此,预编译头文件。因此,一般一般. .cppcpp文件的第一条语句都是文件的第一条语句都是#include #include stdafx.hstdafx.h 。 (2 2)在)在C+C+中,中,_tmain_tmain是主函数名(也可以与是主函数名(也可以与c c一样是一

    12、样是mainmain),每一个项目中有且仅有一个主函数,它表示程序),每一个项目中有且仅有一个主函数,它表示程序执行的开始点。执行的开始点。 2 2、privateprivate(私私有类型)有类型) private private声明成员为私有成员。具有这个访问声明成员为私有成员。具有这个访问控制级别的成员对类外是完全保密的,即只能被控制级别的成员对类外是完全保密的,即只能被它所在类中的成员函数和该类的友元函数访问。它所在类中的成员函数和该类的友元函数访问。【例【例3-33-3】具有】具有privateprivate访问权限的成员的应用访问权限的成员的应用#include #include

    13、stdafx.hstdafx.h # #includeiostreamincludeiostream using namespace using namespace stdstd; ; class Limitclass Limitprivate: private: /声明类的私有成员声明类的私有成员 float float imprestimprest; ; void void warning()warning() coutcoutWarning!; Warning!; public: public: /声明类的公有成员声明类的公有成员 void accept() void accept()

    14、coutcoutn Enter your imprestimprest; ; coutcoutn Your n Your imprestimprest is:t is:timprestimprest; ; / /类的私有数据成员可以被本类的成员函数访问类的私有数据成员可以被本类的成员函数访问 void display()void display() coutcoutn Now ,your n Now ,your imprestimprest is:t is:timprestimprest; ; warning warning();();/类的私有成员函数可以被本类的成员函数访问类的私有成员函数

    15、可以被本类的成员函数访问 ;void main()void main() Limit Limit c;c; c.acceptc.accept(); (); c.displayc.display();(); c.imprestc.imprest=3.3f;=3.3f; /错误,不能通过对象访问类的私有数据成员错误,不能通过对象访问类的私有数据成员 c.warningc.warning(); (); /错误,不能通过对象访问类的私有成员函数错误,不能通过对象访问类的私有成员函数 3 3、protectedprotected(保护类型)(保护类型) protected protected声明成员为保

    16、护成员。具有这个访声明成员为保护成员。具有这个访问控制级别的成员,外界是无法直接访问的。它问控制级别的成员,外界是无法直接访问的。它只能被它所在类及从该类派生的子类的成员函数只能被它所在类及从该类派生的子类的成员函数及友元函数访问。及友元函数访问。例【例【3-43-4】具有】具有protectedprotected访问权限的成员的应用访问权限的成员的应用#include stdafx.h#include stdafx.hclass Limitclass Limit protected: protected: /声明类的保护成员声明类的保护成员 float imprest; float impr

    17、est; void warning() void warning() coutWarning!; coutimprest; /类的保护数据成员可以被本类的成员函数访问 coutn Your imprest is:timprest; ;class Extends:public Limit class Extends:public Limit /声明类声明类LimitLimit的派生类的派生类ExtendsExtends public:public: void ext_display() void ext_display() coutn the display of extends class i

    18、s:; coutn the display of extends class is:; warning(); warning(); /访问从基类继承的保护成员函数访问从基类继承的保护成员函数 ;void main() Limit c; Limit c; c.accept(); c.accept(); c.imprest; c.imprest; /错误类的对象不能访问类的保护数据成员错误类的对象不能访问类的保护数据成员 c.warning; c.warning;/错误类的对象不能访问类的保护成员函数错误类的对象不能访问类的保护成员函数 publicpublic、protectedprotecte

    19、d和和privateprivate三种类成员的可访问性三种类成员的可访问性访问限定符自身的类成员是否可访问子类的类成员是否可访问自身的类对象是否可访问publicprotectedprivate3.2.4成员函数的实现方式 类的成员函数也是函数的一种,它与一般函类的成员函数也是函数的一种,它与一般函数的区别是:它属于一个特定的类,并且它必须数的区别是:它属于一个特定的类,并且它必须被指定为被指定为privateprivate、publicpublic或或protectedprotected三种访问三种访问权限中的一种。权限中的一种。 在使用类的成员函数时,要注意它的访问权在使用类的成员函数时,

    20、要注意它的访问权限限( (它能否被访问它能否被访问) ),以及它的作用域,以及它的作用域( (类函数能在类函数能在什么范围内被访问什么范围内被访问) )。 类的成员函数的定义方式有两种类的成员函数的定义方式有两种: : 第一种方式是在类中进行函数原型说明,而第一种方式是在类中进行函数原型说明,而函数体则在类外进行定义。函数体则在类外进行定义。 采用这种方式定义类函数时,必须用作用域采用这种方式定义类函数时,必须用作用域符符“:”表明该函数所属的类。表明该函数所属的类。返回类型返回类型 类名类名:函数名(参数列表)函数名(参数列表) /函数体函数体【例例3-53-5】定义时钟类。】定义时钟类。#

    21、include #include stdafx.hstdafx.h #include #include iostreamiostream using namespace using namespace stdstd; ;class Clockclass Clock private: private: intint hour,minute,secondhour,minute,second; ; public: public: void void setTimesetTime( (intint newH,intnewH,int newM,intnewM,int newSnewS); ); /函数原

    22、型说明函数原型说明 void void showTimeshowTime(); (); /函数原型说明函数原型说明 ; ; void Clock:setTime(int newH,int newM,int void Clock:setTime(int newH,int newM,int newS) newS) /定义成员函数定义成员函数 hour=newH; hour=newH; minute=newM; minute=newM; second=newS second=newS 说明:说明: (1 1)在定义成员函数时,对函数所带的参数,)在定义成员函数时,对函数所带的参数,既要说明其类型,也

    23、要指出参数名;既要说明其类型,也要指出参数名; (2 2)在定义成员函数时,其返回值必须与函)在定义成员函数时,其返回值必须与函数原型声明中的返回类型相同。数原型声明中的返回类型相同。 第二种方式是在类内直接进行定义。这种方第二种方式是在类内直接进行定义。这种方式一般用在代码比较少的成员函数。式一般用在代码比较少的成员函数。3.2.5成员函数设置为内联函数 一般的函数使用过程中,需要进行函数调用,由于在一般的函数使用过程中,需要进行函数调用,由于在调用函数时,需要保存现场和返回地址、进行参数传递,调用函数时,需要保存现场和返回地址、进行参数传递,再转到子函数的代码起始地址去执行。子函数执行完后

    24、,再转到子函数的代码起始地址去执行。子函数执行完后,又要取出以前保存的返回地址和现场状态,再继续执行。又要取出以前保存的返回地址和现场状态,再继续执行。 内联函数与一般函数的区别在于它不是在调用时发生内联函数与一般函数的区别在于它不是在调用时发生控制转移,而是在编译时将函数体嵌入到每一个调用处。控制转移,而是在编译时将函数体嵌入到每一个调用处。这样就节省了参数传递、控制转移等开销。这样就节省了参数传递、控制转移等开销。内联函数的定义格式为:内联函数的定义格式为: inline 返回值类型返回值类型 函数名(形参列表)函数名(形参列表) /函数体函数体 说明:说明:(1 1)内联函数体内不能含有

    25、循环语句和)内联函数体内不能含有循环语句和switchswitch语句;语句;(2 2)内联函数的定义必须出现在第一次被调用之前;)内联函数的定义必须出现在第一次被调用之前;(3 3)对内联函数不能进行异常接口声明)对内联函数不能进行异常接口声明。 内联函数实际上是一种以空间换时间的方案,内联函数实际上是一种以空间换时间的方案,其缺点是加大了空间方面的开销。它通常用在结其缺点是加大了空间方面的开销。它通常用在结构简单、语句少、使用多的情况下。构简单、语句少、使用多的情况下。 C+ C+默认在类内给出函数体定义的成员函数为默认在类内给出函数体定义的成员函数为内联函数。内联函数。【例【例3-63-

    26、6】内联函数应用举例,计算正方形的面积及周长。】内联函数应用举例,计算正方形的面积及周长。class Squareclass Square private: private:double length;double length; public: public:Square(double x);Square(double x);void area() void area() /函数体在类内定义,默认为内联函数函数体在类内定义,默认为内联函数 cout cout正方形的面积为正方形的面积为:length:length* *lengthendl;lengthendl; inline void Pe

    27、rimeter(); inline void Perimeter(); /内联函数声明内联函数声明 ;Square:Square(double x)Square:Square(double x) length=x; length=x; inline void Square:Perimeter () inline void Square:Perimeter () /内联函数定义内联函数定义 cout cout正方形的周长为正方形的周长为:4:4* *lengthendl;lengthendl; void main()void main() Square ss(2.0); Square ss(2.

    28、0); ss.area (); ss.area (); ss.Perimeter (); ss.Perimeter (); 说明:说明: (1 1)内联函数代码不宜过长,一般是小于)内联函数代码不宜过长,一般是小于1010行代码的小程序,并且不能含有复杂的分支行代码的小程序,并且不能含有复杂的分支(switchswitch)和循环语句。)和循环语句。 (2 2)在类内定义的成员函数默认为内联函数。)在类内定义的成员函数默认为内联函数。 (3 3)在类外给出函数体定义的成员函数,若)在类外给出函数体定义的成员函数,若要定义为内联函数,必须加上关键字要定义为内联函数,必须加上关键字inlinein

    29、line。 (4 4)递归调用的函数不能定义为内联函数。)递归调用的函数不能定义为内联函数。3.2.6成员函数重载 函数重载是指两个以上的函数,具有相同的函数重载是指两个以上的函数,具有相同的函数名,可以对应着多个函数的实现。每种实现函数名,可以对应着多个函数的实现。每种实现对应着一个对应着一个函数体函数体,但是形参的个数或者类型不,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数。匹配,自动确定调用哪一个函数。 【例【例3-73-7】函数重载举例】函数重载举例。 创建创建一个类,在类中定义三个名为一个类,

    30、在类中定义三个名为subtractsubtract的重载成员函数,分别实现两个整数相减、两个的重载成员函数,分别实现两个整数相减、两个实数相减和两个复数相减的实数相减和两个复数相减的功能功能struct complex double real; double imag;class Overloaded public: int subtract(int x,int y); double subtract(double x,double y); /函数重载 complex subtract(complex x,complex y); /函数重载;int Overloaded:subtract (i

    31、nt x,int y) return x-y;double Overloaded:subtract (double x,double y) return x-y;complex Overloaded:subtract (complex x,complex y) complex c; c.real=x.real -y.real ; c.imag =x.imag -y.imag ; return c;int main() int m,n; double x,y; complex a,b,c; Overloaded ol ; m =32; n =23; x =31.1; y =22.2; a.rea

    32、l =12.3; a.imag =10.2; b.real =23.5; b.imag =1.2; coutm-n=ol.subtract (m,n)endl; coutx-y=ol.subtract (x,y)endl; c=ol.subtract (a,b); couta.real+a.imag -b.real+b.imag =c.real+c.imagendl; return 0;3.3 3.3 对象的创建与使用对象的创建与使用 在在C+C+中,声明了类,只是定义了一种新的数据中,声明了类,只是定义了一种新的数据类型,只有当定义了类的对象后,才是生成了这种数类型,只有当定义了类的对象后,

    33、才是生成了这种数据类型的特定实体(实例)。对象是类的实际变量据类型的特定实体(实例)。对象是类的实际变量,创建创建一个对象称为实例化一个对象或创建一个对象实一个对象称为实例化一个对象或创建一个对象实例。例。3.3.1对象的定义1 1、先声明类类型,然后在使用时再定义对象、先声明类类型,然后在使用时再定义对象定义格式与一般变量定义格式相同:定义格式与一般变量定义格式相同: 类名类名 对象名列表;对象名列表;2 2、在声明类的同时,直接定义对象、在声明类的同时,直接定义对象class Student stud1,stud2;3 3、不出现类名,直接定义对象、不出现类名,直接定义对象class st

    34、ud1,stud2;说明:说明: (1 1)必须先定义类,然后再定义类的对象。多个对象之)必须先定义类,然后再定义类的对象。多个对象之间用逗号分隔。间用逗号分隔。 (2 2)声明了一个类就是声明了一种新的数据类型,它本)声明了一个类就是声明了一种新的数据类型,它本身不能接收和存储具体的值,只有定义了类的对象后,系统身不能接收和存储具体的值,只有定义了类的对象后,系统才为其对象分配存储空间。才为其对象分配存储空间。 (3 3)在声明类的同时定义的类对象是一种全局对象,它)在声明类的同时定义的类对象是一种全局对象,它的生存期一直到整个程序运行结束。的生存期一直到整个程序运行结束。 3.3.2 对象

    35、成员的访问1.1.通过对象名和成员运算符访问对象的成员通过对象名和成员运算符访问对象的成员使用这种方式访问对象的数据成员的一般形式为:使用这种方式访问对象的数据成员的一般形式为: 对象名对象名.数据成员数据成员使用这种方式访问对象的成员函数的一般形式为:使用这种方式访问对象的成员函数的一般形式为: 对象名对象名.成员函数名成员函数名(实参列表实参列表) 注意:注意:对象只能访问其的公有(对象只能访问其的公有(publicpublic)成员)成员 【例例3-83-8】建立图书档案类,通过键盘输入每种图】建立图书档案类,通过键盘输入每种图书的相关信息,并按价格从低到高的顺序排序输出。书的相关信息,

    36、并按价格从低到高的顺序排序输出。class Book class Book /Book.hBook.h public: public: char title20, char title20,autherauther10,publish30; 10,publish30; / /书名、作者、出版社书名、作者、出版社 float price float price; ; /价格价格 void input(); void input(); void output(); void output();#include stdafx.h /Book.cpp#include using namespace s

    37、td;#include Book.hvoid Book:input () cintitleautherpublishprice;void Book:output () couttitle auther publish priceendl;int main()int main() int i,j; int i,j; Book bk10,temp; Book bk10,temp; cout cout 请输入书名、作者、出版社和价格请输入书名、作者、出版社和价格endl;endl; for(i=0;i10;i+) for(i=0;i10;i+)bki.input ();bki.input (); f

    38、or(i=0;i10;i+) for(i=0;i10;i+)for(j=i+1;j10;j+)for(j=i+1;jbkj.price ) if(bki.price bkj.price ) temp =bki ; bki =bkj ; temp =bki ; bki =bkj ; bkj =temp ; bkj =temp ; cout cout 输出结果输出结果endl;endl; cout cout 书名书名 作者作者 出版社出版社 价格价格endl;endl; for(i=0;i10;i+) for(i=0;i数据成员数据成员 使用这种方式访问对象的成员函数的一般形式为使用这种方式访问对

    39、象的成员函数的一般形式为: 指向对象的指针指向对象的指针-成员函数名成员函数名(实参列表实参列表) 【例例3-93-9】改写【例】改写【例3-83-8】中的主函数,通过指向对象的】中的主函数,通过指向对象的指针访问对象的数据成员和成员函数。指针访问对象的数据成员和成员函数。intint main() main() intint i,ji,j; ; Book Book bkbk10,10,* *p1,p1,* *p2,temp;p2,temp; coutcout 请输入书名、作者、出版社和价格请输入书名、作者、出版社和价格endlendl; ; for( for(i i=0;i10;i+)=0;

    40、iinput (); p1-input (); /通过指向对象的指针访问对象的成员函数通过指向对象的指针访问对象的成员函数 for(i=0;i10;i+) p1=&bki; for(j=i+1;jprice p2-price ) /通过指向对象的指针访问对象的数据成员 temp =*p1 ;*p1=*p2 ;*p2=temp ;bki=*p1;bkj=*p2; cout 输出结果:endl; cout 书名 作者 出版社 价格endl; for(i=0;ioutput (); return 0;3.3.通过对象的通过对象的引用引用访问对象中的成员访问对象中的成员 对象对象的的引用变量引用变量与

    41、该对象与该对象共占同一段存储单元,实际上共占同一段存储单元,实际上它们是同一个对象,只是用不同的名字表示而已。因此完全它们是同一个对象,只是用不同的名字表示而已。因此完全可以通过引用变量来访问对象中的成员。可以通过引用变量来访问对象中的成员。 定义一个对象的引用变量的方法为:定义一个对象的引用变量的方法为: &引用变量名引用变量名=对象名对象名;【例【例3-103-10】通过对象的引用变量来访问对象的数据成员和成员函数。】通过对象的引用变量来访问对象的数据成员和成员函数。class Timeclass Time public : public : int hour, minute, secon

    42、d; int hour, minute, second; void showTime(); void showTime(); ;int main()int main() Time t1; Time t1; t1.hour=2; t1.hour=2; t1.minute =12; t1.minute =12; t1.second =34; t1.second =34; Time &t2=t1; Time &t2=t1; /定义定义t1t1对象的引用变量对象的引用变量t2t2 coutt2.hourendl; coutt2.hourendl; /通过引用变量访问对象的数据成员通过引用变量访问对象的

    43、数据成员 coutt2.minuteendl; coutt2.minuteendl; coutt2.secondendl; coutt2.secondendl; t2.showTime(); t2.showTime(); /通过引用变量访问对象的成员函数通过引用变量访问对象的成员函数 3.4 3.4 构造构造函数函数 构造构造函数(函数(ConstructorConstructor)是一种特殊的成员函数,它)是一种特殊的成员函数,它是用来完成在声明对象的同时,对对象中的数据成员进行是用来完成在声明对象的同时,对对象中的数据成员进行初始化。初始化。3.4.1构造函数的定义和功能 构造函数的定义如

    44、下:构造函数的定义如下: 类名类名(形参列表);形参列表); 构造函数可以在类内也可在类外定义。在类外定义构构造函数可以在类内也可在类外定义。在类外定义构造函数的形式如下:造函数的形式如下: 类名类名:类名(形参列表)类名(形参列表)/函数体函数体;说明:说明:(1 1)构造函数的名称必须)构造函数的名称必须与与类名相同。类名相同。(2 2)构造函数没有返回值类型,也不能指定为)构造函数没有返回值类型,也不能指定为voidvoid。(3 3)构造函数可以有任意个任意类型的参数。)构造函数可以有任意个任意类型的参数。(4 4)如果没有显式的定义构造函数,系统会自动生成一)如果没有显式的定义构造函

    45、数,系统会自动生成一个默认的构造函数。这个构造函数不含有参数,也不对数个默认的构造函数。这个构造函数不含有参数,也不对数据成员进行初始化,只负责为对象分配存储空间。据成员进行初始化,只负责为对象分配存储空间。(5 5)如果显式的为类定义了构造函数,系统将不再为类)如果显式的为类定义了构造函数,系统将不再为类提供默认构造函数。提供默认构造函数。(6 6)定义对象时,系统会自动调用构造函数。)定义对象时,系统会自动调用构造函数。(7 7)构造函数可以重载。)构造函数可以重载。(8 8)构造函数一般被定义为公有访问权限。)构造函数一般被定义为公有访问权限。【例【例3-113-11】举例说明构造函数的

    46、使用。】举例说明构造函数的使用。class Dateprivate: int year; int month; int day;public: Date(int y,int m,int d); /声明构造函数 void Output();Date:Date(int y,int m,int d) /定义构造函数 year=y; month=m; day=d;void Date:Output()coutyear/month/dayendl;void main() Date today(2012,10,10); today.Output();3.4.2默认构造函数 如果如果类类没有定义构造函数,系统

    47、会自动生成一个默认没有定义构造函数,系统会自动生成一个默认的构造函数。这个构造函数不含有参数,也不会对数据成的构造函数。这个构造函数不含有参数,也不会对数据成员进行初始化。默认构造函数的形式如下:员进行初始化。默认构造函数的形式如下: 类名:构造函数名()类名:构造函数名() 此时要特别注意,数据成员的值是随机的。程序运行此时要特别注意,数据成员的值是随机的。程序运行时容易出错。时容易出错。3.4.3无参构造函数class Point private:int x;int y; public:Point();Point:Point()x=1;y=2;3.4.4构造函数的重载 一个类一个类可以可以

    48、定义多个构造函数,这些构造函数具有相定义多个构造函数,这些构造函数具有相同的名字,但参数的个数或参数的类型存在差别,这称为同的名字,但参数的个数或参数的类型存在差别,这称为构造函数的重载。构造函数的重载。【例3-12】构造函数重载举例。class Dateprivate: int year; int month; int day;public: Date(); /无参的构造函数 Date(int y,int m,int d); /含参的构造函数 void Output();Date:Date() year=2012; month=10; day=11;Date:Date(int y,int m

    49、,int d) year=y; month=m; day=d;void Date:Output()coutyear/month/dayendl;void main() Date today(2012,10,10); Date tomorrow; today.Output(); tomorrow.Output();3.4.5带默认参数的构造函数 带默认参数的构造函数的原型定义形式如下:带默认参数的构造函数的原型定义形式如下: 类名类名(函数名函数名)(参数参数1=默认值,参数默认值,参数2=默认值,默认值,); 所谓的默认参数即为该参数设置一个默认的值所谓的默认参数即为该参数设置一个默认的值,

    50、,可以为可以为全部或者部分参数设置默认值。全部或者部分参数设置默认值。【例3-13】带默认参数的构造函数应用举例。class Dateprivate: int year; int month; int day;public: Date(int y=2012,int m=1,int d=1); /定义带默认参数的构造函数 void Output();Date:Date(int y,int m,int d) year=y; month=m; day=d;void Date:Output()coutyear/month/dayendl;void main()Date today(2012,10,10

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:C++面向对象程序设计第三章类与对象课件.ppt
    链接地址:https://www.163wenku.com/p-2921351.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库