




已阅读5页,还剩52页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章类与对象,.,3,教学目标,(1)理解以类与对象为核心的面向对象程序设计的基本思想,包括封装、继承和多态性的概念及其在面向对象程序中的体现;(2)掌握类的定义方法;(3)掌握类成员的访问权限控制;(4)掌握对象的创建与使用方法;(5)了解构造函数与析构函数的定义与使用。(6)了解类的继承与派生、运算符重载、以及模板等概念。,.,4,基本内容,7.1面向对象程序设计概述7.2类与对象7.3继承,.,5,7.1面向对象程序设计概述,两种程序设计思想:面向过程的程序设计(StructureProgramming)以功能为中心,采用函数来描述操作(动词)面向对象程序设计(ObjectOrientedProgramming)以数据为中心,采用对象来描述内部属性和操作方法(名词),.,6,对象和面向对象,客观世界实体例:人类静态特征(属性attribute)姓名、性别、年龄、班级(/单位)、身高等动态特征(行为behavior)吃饭、睡觉、说话、走路、上课(/上班)等例:汽车静态特征(属性attribute)品牌、生产厂、型号、颜色等动态特征(行为behavior)行驶、转弯、鸣笛、刹车等,.,7,面向对象的基本特征,抽象:数据抽象+代码抽象封装:过程和数据封藏起来继承:基类和派生类多态性:虚函数、函数重载,.,8,OOP的优点,开发时间短,效率高,可靠性高,所开发的程序更强壮重用,共享,可维护性,精简适合于大程序长时间的开发工作,.,9,7.2类与对象,7.2.1类的定义7.2.2成员函数7.2.3对象的使用7.2.4构造函数与析构函数,.,10,类(Class)-数据类型,类是具有相同属性和相同的方法的对象的集合,它是一种既包含数据又包含函数的抽象数据类型。类的构成数据成员(DataMember),即类的属性;成员函数(MemberFunction),即类的方法;,.,11,7.2.1类的定义,class类名private:/私有成员私有的数据成员和成员函数;protected:/保护成员保护的数据成员和成员函数;public:/公有成员公有的数据成员和成员函数;;,.,12,访问控制权限,私有部分(private):数据成员和成员函数只能在该类的范围内被本类的成员函数访问体现类的封装性保护部分(protected):与私有成员的性质相似公有部分(public):成员既可以被本类的成员函数访问,也在类外被该类的对象访问对外界的接口,.,13,例:定义一个狗类(Dog),classDogprivate:charname20;/狗的名字intage;/狗的年龄public:voidset(char*n,inta);/设置数据成员值的函数voiddisplay();/输出数据成员值的函数voidspeak();/发出狗叫声的函数;,.,14,7.2.2成员函数,成员函数的一般形式:函数类型类名:函数名(参数表)函数体,.,15,类的作用域,一个类的所有数据成员和成员函数都在该类的作用域内(包括在类声明外部定义的成员函数)类中的每个成员都可以直接访问本类中的其他任何成员。如果在类作用域之外对该类的数据成员和成员函数进行访问,则要受到一定的限制,有时甚至是不允许的。,.,16,例:Dog类成员函数的定义,voidDog:set(char*n,inta)strcpy(name,n);age=a;voidDog:display()coutnametageendl;voidDog:speak()coutArf!Arf!endl;,/Dog类较完整的定义classDogprivate:charname20;intage;public:voidset(char*n,inta);voiddisplay();voidspeak();voidDog:set(char*n,inta)strcpy(name,n);age=a;voidDog:display()coutnametageendl;voidDog:speak()coutArf!Arf!endl;,/当成员函数比较简单时,可在类定义中直接给出函数体classDogprivate:charname20;intage;public:voidset(char*n,inta)strcpy(name,n);age=a;voiddisplay()coutnametageendl;voidspeak()coutArf!Arf!name0age0;dog1.set(name0,age0);cout第一条狗:endl;dog1.display();dog1.speak();dog2.set(LaiFu,2);cout第二条狗:endl;dog2.display();dog2.speak();dog1=dog2;/同类对象之间可以互相赋值cout对象赋值后的第一条狗:endl;dog1.display();dog1.speak();return0;,.,21,对象的使用,成员函数可直接访问本类中定义的数据成员(公有和私有)类的作用域内类的对象访问其公有数据成员或成员函数需使用运算符“”禁止直接访问一个对象中的私有/保护成员同类对象之间可以整体赋值对象用作函数的参数时属于赋值调用;函数可以返回一个对象。,.,22,7.2.4构造函数与析构函数,构造函数(Constructor)是类的一个特殊成员函数,定义了创建对象的方法,提供了初始化对象的一种简便手段。与构造函数相对应,析构函数(Destructor)用于撤消一个对象,完成释放对象成员所占存储空间的工作。,.,23,构造函数(Constructor),格式:类名:类名(参数表)函数体注意事项:构造函数必须与类名相同构造函数没有返回值其功能是对对象进行初始化,一般由一系列赋值语句构成由系统自动调用,.,24,析构函数(Destructor),格式为:类名:类名();注意事项:函数名与类名相同,只是在前边加“”符号析构函数不得返回任何值析构函数不得带有任何参数其功能是释放对象成员所占用的存储,一般由一系列的delete组成由系统自动调用,.,25,例7-2:使用构造函数和析构函数的Dog类,classDogcharname20;intage;public:Dog()/构造函数1strcpy(name,XXX);age=0;Dog(char*n,inta)/构造函数2strcpy(name,n);age=a;Dog()/析构函数cout析构函数被调用endl;voiddisplay()coutnametageendl;voidspeak()coutArf!Arf!endl;,.,26,7.3继承,7.3.1派生类的定义7.3.2派生类的继承方式和访问属性7.3.3派生类的构造函数和析构函数,.,27,生物类的层次关系,.,28,7.3.1派生类的定义,派生类的定义格式为:class派生类名:继承方式基类名1,继承方式基类名2,继承方式基类名n派生类增加的成员声明;;,.,29,/人员类定义classPersonprotected:charName10;/姓名charSex;/性别public:voidShowMe()/显示数据成员coutNametSexn;/雇员类定义classEmployee:publicPersoncharDept20;/工作部门public:voidShowMe()/显示数据成员coutNametSextDeptn;,单继承的例子,.,30,/飞机类classPlanecharpropeller;/螺旋桨public:voidflying();/飞行方法;/船类classBoatcharhelm;/舵public:voidfloating();/飘浮方法;/水上飞机类classSeaplane:publicPlane,publicBoat;,多继承的例子,.,31,7.3.2派生类的继承方式和访问属性,私有继承private公有继承public保护继承protected,.,32,派生类的定义格式,class派生类名:private|protected|public基类名private:protected:public:;系统的默认值是私有继承,.,33,公有继承(public),以公有继承方式创建的派生类对基类各种成员访问权限如下:基类公有成员相当于派生类的公有成员,即派生类可以象访问自身公有成员一样访问从基类继承的公有成员。基类保护成员相当于派生类的保护成员,即派生类可以象访问自身的保护成员一样,访问基类的保护成员。对于基类的私有成员,派生类无法直接访问。,.,34,私有继承(private),派生类对基类各种成员访问权限如下:基类公有成员和保护成员都相当于派生类的私有成员,派生类只能通过自身的函数成员访问它们;对于基类的私有成员,无论派生类内部成员或派生类使用者都无法直接访问。,.,35,保护继承(protected),派生类对基类各种成员访问权限如下:基类的公有成员和保护成员都相当于派生类的保护成员,派生类可以通过自身的成员函数或其子类的成员函数访问它们对于基类的私有成员,无论派生类内部成员或派生类使用者都无法直接访问,.,36,基类成员在派生类中的访问属性,/例7-3:派生类的定义及使用#include#includeusingnamespacestd;classPerson/人员类定义charName10;/姓名intAge;/年龄public:voidSet(char*name,intage)/设置数据成员strcpy(Name,name);Age=age;voidDisplay()coutNametAgetendl;classStudent:publicPerson/学生类定义(公有继承)intNumber;/学号charClassName10;/班级public:voidSetStu(char*classname,intnumber,char*name,intage)strcpy(ClassName,classname);Number=number;Set(name,age);/派生类成员函数直接使用基类的公有成员voidDisplayStu()coutNumbertClassNamet;Display();/派生类成员函数直接使用基类的公有成员;intmain()Studentstu1;stu1.SetStu(计算机21,95071007,张三,19);stu1.Display();/派生类对象直接使用基类的公有成员stu1.DisplayStu();return0;,.,38,7.3.3派生类的构造函数和析构函数,派生类构造函数的一般形式为:派生类名:派生类名(参数总表):基类名1(参数表1),基类名n(参数表n),内嵌对象名1(对象参数表1),内嵌对象名m(对象参数表m)派生类新增加成员的初始化;,.,39,派生类构造函数的执行次序,首先,调用基类构造函数,调用顺序按照它们被继承时声明的基类名顺序执行。其次,调用内嵌对象构造函数,调用次序按各个对象在派生类内声明的顺序。最后,执行派生类构造函数体中的内容。,.,40,析构函数,派生类与基类的析构函数没有什么联系,彼此独立,派生类或基类的析构函数只作各自类对象消亡前的善后工作。派生类析构函数执行过程恰与构造函数执行过程相反。首先执行派生类析构函数然后执行内嵌对象的析构函数最后执行基类析构函数,/例7-4:派生类构造函数和析构函数#include#includeusingnamespacestd;classPerson/人员类定义charName10;intAge;public:Person(char*name,intage)/构造函数strcpy(Name,name);Age=age;coutPerson类的构造函数被调用endl;Person()/析构函数coutPerson类的析构函数被调用endl;voidDisplay()coutNametAgetendl;classStudent:publicPerson/学生类定义(公有继承)intNumber;charClassName10;public:Student(char*classname,intnumber,char*name,intage):Person(name,age)strcpy(ClassName,classname);Number=number;coutStudent类的构造函数被调用endl;Student()coutStudent类的析构函数被调用endl;voidDisplayStu()coutNumbertClassName”和“”用作输入输出运算符,7.4.1运算符重载,.,46,运算符重载的定义,形式:函数返回值类型类名:operator运算符(参数表)运算符重载实际也是一种函数重载函数operator运算符重载了运算符,/例7-5:重载复数类的运算符classComplexdoublereal,imag;public:Complex(doubler=0,doublei=0)/带默认参数值的构造函数real=r;imag=i;doubleReal()returnreal;/取复数的实部doubleImag()returnimag;/取复数的虚部Complexoperator+(Complex,.,48,7.4.2虚函数,定义:在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数语法:virtual函数返回类型函数名(参数表)函数体用途:实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数,.,49,例7-6:使用虚函数实现多态性,#includeusingnamespacestd;classAnimal/基类:动物类public:virtualvoidSpeak()coutHowdoesaAnimalspeak?endl;classCat:publicAnimal/派生类:猫类public:virtualvoidSpeak()coutmiao!miao!endl;classDog:publicAnimal/派生类:狗类public:virtualvoidSpeak()coutwang!wang!endl;,.,50,虚函数的使用限制,应通过指针或引用调用虚函数,而不要以对象名调用虚函数说明语句;在派生类中重定义的基类虚函数仍为虚函数,同时可以省略virtual关键字;在派生类重新定义时,必须与基类中的原型完全相同;否则会成为一般的重载;不能定义虚构造函数,可以定义虚析构函数。,.,51,抽象
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环保型乳化剂项目可行性研究报告
- 2025-2026学年统编版(2024)小学语文一年级上册第一单元测试卷及参考答案
- 船舶防锈涂料项目可行性研究报告
- 防汛知识培训开场词课件
- 国内各类广告业务公司劳动协议
- 语文8威科特先生的陷阱
- 共享经济发展对就业市场的影响
- 河北省秦皇岛市实验中学2025-2026学年高二上学期开学考试英语试卷
- 四川省眉山市东坡区2025-2026学年六年级下册语文第二学月综合练习(有答案)
- 内蒙古乌海市第二中学2024-2025学年七年级上学期第一次教学质量摸底检测数学试卷(含答案)
- 2025年excel数据分析测试题及答案
- 职级职等管理办法
- 工厂安全注意事项有哪些
- 头颅CT“3B”阅片法课件
- 建筑垃圾资源化处理方案
- 民航职业道德教学课件
- 抚州辅警考试试题及答案
- 梯田建筑规划方案(3篇)
- 《牙体牙髓病学》教学大纲
- 社会保险政策宣讲课件
- 制造型企业销售管理制度
评论
0/150
提交评论