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

类型七章节类与对象课件.pptx

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

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

    特殊限制:

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

    关 键  词:
    章节 对象 课件
    资源描述:

    1、第七章第七章 类与对象类与对象2教学目标(1)理解以类与对象为核心的面向对象程序设计的基本思想,包括封装、继承和多态性的概念及其在面向对象程序中的体现;(2)掌握类的定义方法;(3)掌握类成员的访问权限控制;(4)掌握对象的创建与使用方法;(5)了解构造函数与析构函数的定义与使用。(6)了解类的继承与派生、运算符重载、以及模板等概念。3基本内容 7.1 面向对象程序设计概述 7.2 类与对象 7.3 继承47.1 面向对象程序设计概述 两种程序设计思想:面向过程的程序设计面向过程的程序设计(Structure ProgrammingStructure Programming)以功能为中心,采用

    2、函数来描述操作以功能为中心,采用函数来描述操作(动词动词)面向对象程序设计面向对象程序设计(Object Oriented Object Oriented ProgrammingProgramming)以数据为中心,采用对象来描述内部属性和操作方以数据为中心,采用对象来描述内部属性和操作方法法(名词名词)5对象和面向对象 客观世界实体例:人类例:人类 静态特征(属性静态特征(属性attributeattribute)姓名、性别、年龄、班级(姓名、性别、年龄、班级(/单位)、身高等单位)、身高等 动态特征(行为动态特征(行为behaviorbehavior)吃饭、睡觉、说话、走路、上课(吃饭、睡

    3、觉、说话、走路、上课(/上班)等上班)等例:汽车例:汽车 静态特征(属性静态特征(属性attributeattribute)品牌、生产厂、型号、颜色等品牌、生产厂、型号、颜色等 动态特征(行为动态特征(行为behaviorbehavior)行驶、转弯、鸣笛、刹车等行驶、转弯、鸣笛、刹车等6面向对象的基本特征 抽象:数据抽象+代码抽象 封装:过程和数据封藏起来 继承:基类和派生类 多态性:虚函数、函数重载7OOP的优点 开发时间短,效率高,可靠性高,所开发的程序更强壮重用,共享,可维护性,精简 适合于大程序长时间的开发工作87.2 类与对象 7.2.1 类的定义 7.2.2 成员函数 7.2.3

    4、 对象的使用 7.2.4 构造函数与析构函数9类(Class)-数据类型 类是具有相同属性和相同的方法的对象的集合,它是一种既包含数据又包含函数的抽象数据类型。类的构成数据成员(数据成员(Data MemberData Member),即类的属性;),即类的属性;成员函数(成员函数(Member FunctionMember Function),即类的方),即类的方法;法;107.2.1 类的定义 class 类名 private:/私有成员 私有的数据成员和成员函数;protected:/保护成员 保护的数据成员和成员函数;public:/公有成员 公有的数据成员和成员函数;;11访问控制权

    5、限 私有部分(private):数据成员和成员函数只能在该类的范围内被本类的成员函数访问体现类的封装性 保护部分(protected):与私有成员的性质相似 公有部分(public):成员既可以被本类的成员函数访问,也在类外被该类的对象访问对外界的接口 12例:定义一个狗类(Dog)class Dogprivate:char name20;/狗的名字intage;/狗的年龄public:voidset(char*n,int a);/设置数据成员值的函数voiddisplay();/输出数据成员值的函数voidspeak();/发出狗叫声的函数;137.2.2 成员函数 成员函数的一般形式:函数

    6、类型函数类型 类名类名:函数名函数名(参数表参数表)函数体函数体14类的作用域 一个类的所有数据成员和成员函数都在该类的作用域内(包括在类声明外部定义的成员函数)类中的每个成员都可以直接访问本类中的其他任何成员。如果在类作用域之外对该类的数据成员和成员函数进行访问,则要受到一定的限制,有时甚至是不允许的。15例:Dog类成员函数的定义void Dog:set(char*n,int a)strcpy(name,n);age=a;void Dog:display()coutnametageendl;void Dog:speak()coutArf!Arf!endl;/Dog类较完整的定义class

    7、Dog private:char name20;intage;public:voidset(char*n,int a);voiddisplay();voidspeak();void Dog:set(char*n,int a)strcpy(name,n);age=a;void Dog:display()coutnametageendl;void Dog:speak()coutArf!Arf!endl;/当成员函数比较简单时,可在类定义中直接给出函数体class Dog private:char name20;intage;public:voidset(char*n,int a)strcpy(na

    8、me,n);age=a;voiddisplay()coutnametageendl;voidspeak()coutArf!Arf!-运算符运算符19例7-1:Dog类和对象int main()char name020;int age0;Dog dog1,dog2;cout name0 age0;dog1.set(name0,age0);cout 第一条狗:endl;dog1.display();dog1.speak();dog2.set(LaiFu,2);cout 第二条狗:endl;dog2.display();dog2.speak();dog1=dog2;/同类对象之间可以互相赋值cout

    9、 对象赋值后的第一条狗:endl;dog1.display();dog1.speak();return 0;20对象的使用成员函数可直接访问本类中定义的数据成员(公有和私有)类的作用域内类的对象访问其公有数据成员或成员函数需使用运算符“”禁止直接访问一个对象中的私有/保护成员同类对象之间可以整体赋值对象用作函数的参数时属于赋值调用;函数可以返回一个对象。217.2.4 构造函数与析构函数 构造函数(Constructor)是类的一个特殊成员函数,定义了创建对象的方法,提供了初始化对象的一种简便手段。与构造函数相对应,析构函数(Destructor)用于撤消一个对象,完成释放对象成员所占存储空间

    10、的工作。22构造函数(构造函数(Constructor)格式:类名类名:类名类名(参数表参数表)函数体函数体 注意事项:构造函数必须与类名相同构造函数必须与类名相同构造函数没有返回值构造函数没有返回值其功能是对对象进行初始化,一般由一系列其功能是对对象进行初始化,一般由一系列赋值语句构成赋值语句构成由系统自动调用由系统自动调用23析构函数(析构函数(Destructor)格式为:类名类名:类名类名();注意事项:函数名与类名相同,只是在前边加函数名与类名相同,只是在前边加“”符号符号 析构函数不得返回任何值析构函数不得返回任何值 析构函数不得带有任何参数析构函数不得带有任何参数 其功能是释放对

    11、象成员所占用的存储,一般其功能是释放对象成员所占用的存储,一般由一系列的由一系列的delete组成组成 由系统自动调用由系统自动调用24例7-2:使用构造函数和析构函数的Dog类class Dog char name20;intage;public:Dog()/构造函数构造函数1strcpy(name,XXX);age=0;Dog(char*n,int a)/构造函数构造函数2strcpy(name,n);age=a;Dog()/析构函数析构函数cout析构函数被调用析构函数被调用endl;voiddisplay()coutnametageendl;voidspeak()coutArf!Arf

    12、!endl;257.3 继承 7.3.1 派生类的定义 7.3.2 派生类的继承方式和访问属性 7.3.3 派生类的构造函数和析构函数26生物类的层次关系277.3.1 派生类的定义 派生类的定义格式为:class 派生类名:继承方式 基类名1,继承方式 基类名2,继承方式 基类名n派生类增加的成员声明;;28/人员类定义class Personprotected:char Name10;/姓名char Sex;/性别public:void ShowMe()/显示数据成员cout Namet Sexn;/雇员类定义class Employee:public Person char Dept20

    13、;/工作部门public:void ShowMe()/显示数据成员cout Namet Sext Dept n;单继承的例子单继承的例子 29/飞机类 class Planechar propeller;/螺旋桨public:void flying();/飞行方法;/船类class Boatchar helm;/舵public:void floating();/飘浮方法;/水上飞机类 class Seaplane:public Plane,public Boat;多继承的例子多继承的例子 307.3.2 派生类的继承方式和访问属性 私有继承private 公有继承public 保护继承prot

    14、ected31派生类的定义格式class 派生类名:private|protected|public 基类名private:protected:public:;系统的默认值是私有继承32公有继承(public)以公有继承方式创建的派生类对基类各种成员访问权限如下:基类公有成员相当于派生类的公有成员,即派生类可以象访问基类公有成员相当于派生类的公有成员,即派生类可以象访问自身公有成员一样访问从基类继承的公有成员。自身公有成员一样访问从基类继承的公有成员。基类保护成员相当于派生类的保护成员,即派生类可以象访问基类保护成员相当于派生类的保护成员,即派生类可以象访问自身的保护成员一样,访问基类的保护成

    15、员。自身的保护成员一样,访问基类的保护成员。对于基类的私有成员,派生类无法直接访问。对于基类的私有成员,派生类无法直接访问。33私有继承(private)派生类对基类各种成员访问权限如下:基类公有成员和保护成员都相当于派生类的私有成员,派生基类公有成员和保护成员都相当于派生类的私有成员,派生类只能通过自身的函数成员访问它们;类只能通过自身的函数成员访问它们;对于基类的私有成员,无论派生类内部成员或派生类使用者对于基类的私有成员,无论派生类内部成员或派生类使用者都无法直接访问。都无法直接访问。34保护继承(protected)派生类对基类各种成员访问权限如下:基类的公有成员和保护成员都相当于派生

    16、类的保护成员,派生类可基类的公有成员和保护成员都相当于派生类的保护成员,派生类可以通过自身的成员函数或其子类的成员函数访问它们以通过自身的成员函数或其子类的成员函数访问它们对于基类的私有成员,无论派生类内部成员或派生类使用者都无法对于基类的私有成员,无论派生类内部成员或派生类使用者都无法直接访问直接访问 35基类成员在派生类中的访问属性基类中的成员基类中的成员在派生类中的访问属性在派生类中的访问属性公有派生公有派生私有派生私有派生保护派生保护派生公有成员公有成员公有公有私有私有保护保护私有成员私有成员不可访问不可访问不可访问不可访问不可访问不可访问保护成员保护成员保护保护私有私有保护保护/例7

    17、-3:派生类的定义及使用#include#include using namespace std;class Person/人员类定义char Name10;/姓名intAge;/年龄public:void Set(char*name,int age)/设置数据成员strcpy(Name,name);Age=age;void Display()coutNametAgetendl;class Student:public Person/学生类定义(公有继承)int Number;/学号char ClassName10;/班级public:voidSetStu(char*classname,int

    18、 number,char*name,int age)strcpy(ClassName,classname);Number=number;Set(name,age);/派生类成员函数直接使用基类的公有成员voidDisplayStu()cout Number t ClassName t;Display();/派生类成员函数直接使用基类的公有成员;int main()Student stu1;stu1.SetStu(计算机21,95071007,张三,19);stu1.Display();/派生类对象直接使用基类的公有成员stu1.DisplayStu();return 0;377.3.3 派生类

    19、的构造函数和析构函数 派生类构造函数的一般形式为:派生类名:派生类名(参数总表):基类名1(参数表1),基类名n(参数表n),内嵌对象名1(对象参数表1),内嵌对象名m(对象参数表m)派生类新增加成员的初始化;38派生类构造函数的执行次序 首先,调用基类构造函数,调用顺序按照它们被继承时声明的基类名顺序执行。其次,调用内嵌对象构造函数,调用次序按各个对象在派生类内声明的顺序。最后,执行派生类构造函数体中的内容。39析构函数 派生类与基类的析构函数没有什么联系,彼此独立,派生类或基类的析构函数只作各自类对象消亡前的善后工作。派生类析构函数执行过程恰与构造函数执行过程相反。首先执行派生类析构函数首

    20、先执行派生类析构函数然后执行内嵌对象的析构函数然后执行内嵌对象的析构函数最后执行基类析构函数最后执行基类析构函数 /例7-4:派生类构造函数和析构函数#include#include using namespace std;class Person/人员类定义char Name10;intAge;public:Person(char*name,int age)/构造函数strcpy(Name,name);Age=age;coutPerson类的构造函数被调用endl;Person()/析构函数coutPerson类的析构函数被调用endl;void Display()coutNametAget

    21、endl;class Student:public Person/学生类定义(公有继承)int Number;char ClassName10;public:Student(char*classname,int number,char*name,int age):Person(name,age)strcpy(ClassName,classname);Number=number;coutStudent类的构造函数被调用 endl;Student()coutStudent类的析构函数被调用endl;voidDisplayStu()cout Number t ClassName”和和“”用作输入输出

    22、运算符用作输入输出运算符 7.4.1 运算符重载运算符重载 45运算符重载的定义 形式:函数返回值类型函数返回值类型 类名类名:operator 运算符运算符(参数表参数表)运算符重载实际也是一种函数重载 函数 operator 运算符重载了运算符/例7-5:重载复数类的运算符class Complexdouble real,imag;public:Complex(double r=0,double i=0)/带默认参数值的构造函数real=r;imag=i;double Real()return real;/取复数的实部double Imag()return imag;/取复数的虚部Comp

    23、lex operator+(Complex&);/重载运算符 Complex operator-(Complex&);/重载运算符;Complex Complex:operator+(Complex&c)Complex temp;temp.real=real+c.real;temp.imag=imag+c.imag;return temp;Complex Complex:operator-(Complex&c)Complex temp;temp.real=real-c.real;temp.imag=imag-c.imag;return temp;477.4.2 虚函数虚函数 定义:在某在某基类

    24、基类中声明为中声明为virtual并在一个或多个派生并在一个或多个派生类中被重新定义的成员函数类中被重新定义的成员函数 语法:virtual 函数返回类型函数返回类型 函数名(参数表)函数名(参数表)函数体函数体 用途:实现多态性,通过指向派生类的基类指针,访实现多态性,通过指向派生类的基类指针,访问派生类中同名覆盖成员函数问派生类中同名覆盖成员函数48例 7-6:使用虚函数实现多态性#include using namespace std;class Animal/基类:动物类public:virtual void Speak()coutHow does a Animal speak?end

    25、l;class Cat:public Animal/派生类:猫类public:virtual void Speak()coutmiao!miao!endl;class Dog:public Animal/派生类:狗类public:virtual void Speak()coutwang!wang!endl;49虚函数的使用限制 应通过指针或引用调用虚函数,而不要以对象名调用虚函数说明语句;在派生类中重定义的基类虚函数仍为虚函数,同时可以省略virtual关键字;在派生类重新定义时,必须与基类中的原型完全相同;否则会成为一般的重载;不能定义虚构造函数,可以定义虚析构函数。50抽象类 纯虚函数 v

    26、irtual 返回类型返回类型 函数名(参数表)函数名(参数表)=0 具体实现只能在派生类中完成具体实现只能在派生类中完成 抽象类 至少包含一个纯虚函数的类至少包含一个纯虚函数的类抽象类为其所有子类提供了统一的操作界抽象类为其所有子类提供了统一的操作界面,使其派生类具有一系列统一的方法。面,使其派生类具有一系列统一的方法。51抽象类的使用要求 抽象类不能实例化 抽象类只作为基类被继承 可以定义指向抽象类的指针或引用,这个指针或引用必然指向派生类对象。从而实现多态性。527.5 类模板 与函数模板相似,程序中可以通过高度抽象首先定义一个类模板,然后通过使用不同的实参生成不同的类。类是对问题空间的

    27、抽象,而类模板则是对类的抽象,即更高层次上的抽象。类模板的定义方法为:template class 类名;/例7-7 类模板的使用#include using namespace std;template class AnyTypeTx;public:AnyType(T a)x=a;T GetX()return x;int main()AnyType i(5);AnyType d(3.14);AnyType c(a);cout 整型类:i.GetX()endl;cout 双精度类:d.GetX()endl;cout 字符类:c.GetX()endl;return 0;54上机指导 7.6 使用ClassView标签55应用举例例7-8设计一个时间类,要求能够设置时间、进行时间的加减运算,并以一定格式显示时间。例7-9编写教师信息管理程序,实现显示教师信息、增加教师信息、删除教师信息等功能。56学好程序设计语言的唯一途径是 你的编程能力与你在计算机上投入的时间成 结结 束束 语语

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

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


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


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

    163文库