《第21 面向对象程序设计精选PPT.ppt》由会员分享,可在线阅读,更多相关《第21 面向对象程序设计精选PPT.ppt(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第21 面向对象程序面向对象程序设计设计第1页,此课件共37页哦2.1 面向对象程序设计思想面向对象程序设计思想面向面向对象程序象程序设计的特点的特点1抽象性用C+语言可以将该图形描述如下:圆形(circle):数据抽象:double x,y,r;行为抽象:setx();sety();setr();draw();第2页,此课件共37页哦抽象是面向对象方法的核心。2封装性3继承性 4多态性多态性也是面向对象程序设计的重要特性之一。第3页,此课件共37页哦1.抽象抽象 抽抽象象是是指指从从具具体体的的实实例例中中抽抽取取出出来来共共同同的的性性质质并并加加以以描描述述的的过过程程,它它忽忽略略了
2、了一一个个主主题题中中与与当当前前目目标标无无关关的的那那些些方方面,以便更充分地注意与当前目标有关的方面。面,以便更充分地注意与当前目标有关的方面。第4页,此课件共37页哦抽象过程:u先注意问题的本质及描述,其次是实现过程或细节。u数据抽象:描述某类对象的属性或状态(对象相互 区别的物理量)。u代码抽象:描述某类对象的共有的行为特征或具有 的功能。抽象的实现:通过类的声明抽象的实现:通过类的声明第5页,此课件共37页哦抽象实例抽象实例钟表钟表数据抽象:int Hour,int Minute,int Second 代码抽象:代码抽象:SetTime(),ShowTime()第6页,此课件共37
3、页哦抽象实例抽象实例钟表类钟表类 class Clock public:void SetTime(int NewH,int NewM,int NewS);void ShowTime();private:int Hour,Minute,Second;第7页,此课件共37页哦2 封装封装 封装指的是将封装指的是将方法和数据放于同一对象中方法和数据放于同一对象中,使得对数据的,使得对数据的存取只能通过该对象本身的方法来进行。存取只能通过该对象本身的方法来进行。主主要要思思想想是是将将数数据据(数数据据成成员员)及及处处理理这这些些数数据据的的相相应应函函数数(成成员员函函数数)封封装装到到类类cla
4、ssclass中中(C+C+的的一一种种新新的的定定义义数数据据类类型型的的方方法法),而而使使用用类类的的变变量量则则称称为为对对象象(objectobject),在在对对象象内内,只只有有属属于于该该对对象象的的成成员员函函数数才才可可以以存存取取该该对对象象的的数数据据成成员员。这这样样,其其他他函函数数就就不不会会破破坏坏到到它它的的内内容容,从从而而起起到保护和隐藏数据的效果。到保护和隐藏数据的效果。第8页,此课件共37页哦 将抽象出的数据成员、代码成员相结合,将它们视为一个整体。u目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使
5、用类的成员。实现封装:类声明中的 第9页,此课件共37页哦实例实例第10页,此课件共37页哦3继承继承 E继承继承是一种联结类与类之间的层次模型,它允许和鼓励类的是一种联结类与类之间的层次模型,它允许和鼓励类的重用,提供了一种明确表达共性的方法。重用,提供了一种明确表达共性的方法。E一个新类可以从现有的类中派生,这个过程称为一个新类可以从现有的类中派生,这个过程称为类继承类继承 E继承性很好地解决了软件的可重用问题继承性很好地解决了软件的可重用问题 E实现:声明派生类 第11页,此课件共37页哦4多态多态E多态性指的是同一消息被不同的对象接收后被解释为不同含义多态性指的是同一消息被不同的对象接
6、收后被解释为不同含义的能力,也就是的能力,也就是一个接口名称具有多种功能。一个接口名称具有多种功能。即即同一名称,同一名称,不同的功能实现方式。不同的功能实现方式。E多态性语言具有多态性语言具有语言灵活、抽象、行为共享、代码共享语言灵活、抽象、行为共享、代码共享的优势,的优势,很好的解决了应用程序函数同名的问题。很好的解决了应用程序函数同名的问题。E目的:达到行为标识统一,减少程序中标识符的个数。目的:达到行为标识统一,减少程序中标识符的个数。E实现:重载函数和虚函数实现:重载函数和虚函数 第12页,此课件共37页哦2.2 面向对象的基石面向对象的基石类类2.2.1 2.2.1 从结构到类从结
7、构到类2.2.2 2.2.2 类的定义类的定义 2.2.3 2.2.3 构造函数构造函数 2.2.4 2.2.4 析构函数析构函数 第13页,此课件共37页哦2.2.1从结构到类从结构到类 1结构体结构体 VCVC不不仅仅提提供供了了大大量量预预先先定定义义的的数数据据类类型型,而而且且还还支支持持自定义的数据类型。自定义的数据类型。结结构构就就是是把把相相互互关关联联的的一一些些基基本本数数据据类类型型的的元元素素组组成成一一个个新新的独立统一体。的独立统一体。第14页,此课件共37页哦【例例2-1】定义一个职工定义一个职工EmployeeEmployee结构数据类型,它包括姓名、结构数据类
8、型,它包括姓名、工资、地址、移动电话。工资、地址、移动电话。struct Employeestruct Employee char name9;char name9;float salary;float salary;char address40;char address40;char mobile12;char mobile12;定义一个结构体,事实上是定义了一种数据类型,程序并不会给定义一个结构体,事实上是定义了一种数据类型,程序并不会给类型分配内存,内存分配是发生在结构体变量上类型分配内存,内存分配是发生在结构体变量上第15页,此课件共37页哦#include iostream.h#in
9、clude iostream.h#include string.h#include string.hvoid main()void main()struct Employee EmployeeA;struct Employee EmployeeA;strcpy(EmployeeA.name,strcpy(EmployeeA.name,灭绝师太灭绝师太););EmployeeA.salary=168.47;EmployeeA.salary=168.47;strcpy(EmployeeA.address,strcpy(EmployeeA.address,峨眉山上峨眉山上););strcpy(Emp
10、loyeeA.mobile,13688667755);strcpy(EmployeeA.mobile,13688667755);cout EmployeeA.namecout EmployeeA.name已经领上工资了已经领上工资了,其数目是其数目是 EmployeeA.salaryendl;EmployeeA.salaryendl;coutcout要要 想想 拜拜 谒谒 她她,请请 到到 EmployeeA.addressEmployeeA.address或或 直直 接接 传传 呼呼 EmployeeA.mobileendl;EmployeeA.mobileendl;【例【例2-2】定义一个
11、具体职工定义一个具体职工EmployeeAEmployeeA,并对该职工进行赋值。,并对该职工进行赋值。程序的主文件名为程序的主文件名为DefStru.cppDefStru.cpp。第16页,此课件共37页哦程序的运行结果是:程序的运行结果是:灭绝师太已经领上工资了灭绝师太已经领上工资了,其数目是其数目是168.47168.47要想拜谒她,请到峨眉山上或直接传呼要想拜谒她,请到峨眉山上或直接传呼1368866775513688667755 第17页,此课件共37页哦2类类E类类是是从从一一个个个个具具体体的的事事物物中中把把共共同同特特征征抽抽取取出出来来形形成成的的一个概念,一个概念,它反映
12、了事物之间的共性它反映了事物之间的共性 E在在C+C+中,在类的定义中,不仅有中,在类的定义中,不仅有反映事物属性的成员变反映事物属性的成员变量,还有反映属性操作的成员函数。量,还有反映属性操作的成员函数。E类一种自定义数据类型类一种自定义数据类型 。第18页,此课件共37页哦2.2.2类的定义类的定义 在在C+中类的定义方式为:中类的定义方式为:class class 类名类名 private:private:私有数据及成员函数;私有数据及成员函数;protected:protected:保护数据及成员函数;保护数据及成员函数;public:public:公有数据及成员函数;公有数据及成员函
13、数;;第19页,此课件共37页哦Eclassclass是类定义符是类定义符,类名是一种标识符,它的命名规则,类名是一种标识符,它的命名规则与变量名的命名规则相同。与变量名的命名规则相同。一对花括号内是类的说明部分,一对花括号内是类的说明部分,说明该类的成员说明该类的成员。类的成员包括。类的成员包括成员变量和成员函数两部分。成员变量和成员函数两部分。E上述在类的成员变量和成员函数前面出现的关键字上述在类的成员变量和成员函数前面出现的关键字publicpublic(公有)、(公有)、privateprivate(私有)或(私有)或protectedprotected(保护)(保护)表示成员的访问属
14、性表示成员的访问属性。在类中声明的成员变量若不特别在类中声明的成员变量若不特别指明,都被视为私有类型指明,都被视为私有类型。私有类型的数据只允许类本身。私有类型的数据只允许类本身声明的函数对其进行存取,而类外部的任何函数都不能访问。声明的函数对其进行存取,而类外部的任何函数都不能访问。公有类型的成员可以被任何函数来访问,它们是类与外部的公有类型的成员可以被任何函数来访问,它们是类与外部的接口。接口。第20页,此课件共37页哦类的定义反映了对类的描述类的定义反映了对类的描述,定义一个类就是定义一种数据,定义一个类就是定义一种数据类型,把握类的定义首先要掌握类中包含反映事物属性的类型,把握类的定义
15、首先要掌握类中包含反映事物属性的那些成员变量和反映事物操作的那些成员函数。那些成员变量和反映事物操作的那些成员函数。【例例2-32-3】定定义义一个一个职职工工TEmployeeTEmployee类类,它包括姓名、工,它包括姓名、工资资、地址、移地址、移动电话动电话数据成数据成员员和两个成和两个成员员函数,分函数,分别实现输别实现输入入职职工数据和工数据和显显示示职职工属性。工属性。第21页,此课件共37页哦class TEmployeeclass TEmployee public:public:void input(char*name,float salary,char*address,ch
16、ar*mobile);void input(char*name,float salary,char*address,char*mobile);void display();void display();private:private:char m_name9;char m_name9;float m_salary;float m_salary;char m_address40;char m_address40;char m_mobile12;char m_mobile12;第22页,此课件共37页哦【例【例2-42-4】定义一个交通工具类TVehicle,它具有轮子个数、载重两个数据成员和三个
17、成员函数,分别实现输入交通工具的轮子和载重、取轮子个数和载重。class TVehicleclass TVehicle public:public:void Initialize(int wheels,float weight);/void Initialize(int wheels,float weight);/交通工具的初始化交通工具的初始化int GetWheels(void);/int GetWheels(void);/取轮子个数取轮子个数float GetWeight(void);/float GetWeight(void);/取载重取载重private:private:int m_
18、wheels;/int m_wheels;/轮子个数轮子个数float m_weight;/float m_weight;/载重载重;第23页,此课件共37页哦2.2.3构造函数构造函数 构造函数的作用是在对象被创建时使用特定的 值构造对象,或者说将对象 初始化 为一个特定的状态。在对象创建时 由系统自动调用。如果程序中未声明,则系统自动产生出一个 默认形式 的构造函数。允许为 内联 函数、重载 函数、带默认形参值 的函数。第24页,此课件共37页哦构造函数举例构造函数举例 class Clock public:Clock(int NewH,int NewM,int NewS);/构造函数构造
19、函数 void SetTime(int NewH,int NewM,int NewS);void ShowTime();private:int Hour,Minute,Second;第25页,此课件共37页哦构造函数举例构造函数举例构造函数的实现:构造函数的实现:Clock:Clock(int NewH,int NewM,int NewS)Hour=NewH;Minute=NewM;Second=NewS;建立对象时构造函数的作用:建立对象时构造函数的作用:int main()Clock c(0,0,0);/隐含调用构造函数,将初始值作为实参。c.ShowTime();第26页,此课件共37页
20、哦拷贝构造函数拷贝构造函数拷贝构造函数是一种特殊的构造函数,其形参为本类 的对象引用。class 类名 public:类名(形参);/构造函数 类名(类名&对象名);/拷贝构造函数.;类名:类名(类名&对象名)/拷贝构造函数的实现 函数体 第27页,此课件共37页哦2.2.3析构函数析构函数 完成对象被删除前的一些清理工作。在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间。如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数。第28页,此课件共37页哦【例2-5】一个包含构造函数和析构函数的例子。程序的主文件为 ConstructorExam.cpp。#include
21、#include#include#include class Exlclass Exl private:private:int x;int x;public:public:Exl()coutEx1 Exl()coutEx1 类的对象建立,其构造函数被调用类的对象建立,其构造函数被调用n;n;Exl()coutEx1Exl()coutEx1类的对象撤消,其析构函数被调用类的对象撤消,其析构函数被调用n;n;void setdata(int i)x=i*2;/void setdata(int i)x=i*2;/在类中定义成员函数在类中定义成员函数setdata()setdata()void pri
22、nt();void print();/;/类类ExlExl定义结束定义结束第29页,此课件共37页哦class Ex2class Ex2 int y;int y;public:public:Ex2()coutEx2 Ex2()coutEx2 类的对象建立,其构造函数被调用类的对象建立,其构造函数被调用n;n;Ex2()coutEx2Ex2()coutEx2类的对象撤消,其析构函数被调用类的对象撤消,其析构函数被调用n;n;void setdata(int j)y=j*j;void setdata(int j)y=j*j;void print();void print();/;/类类Ex2Ex2
23、定义结束定义结束void Ex2:print()void Ex2:print()coutclass Ex2:setw(6)y n;coutclass Ex2:setw(6)y n;/成员函数成员函数print()print()定义结束定义结束第30页,此课件共37页哦void main()void main()Exl s;Exl s;Ex2 t;Ex2 t;s.setdata(5);s.setdata(5);s.print();s.print();t.setdata(5);t.setdata(5);t.print();t.print();程序运行结果为:程序运行结果为:Ex1 Ex1 类类的的
24、对对象象建建立立,其其构构造造函函数数被调用被调用Ex2 Ex2 类类的的对对象象建建立立,其其构构造造函函数数被被调用调用class Exl:10class Exl:10class Ex2:25class Ex2:25Ex2Ex2类类的的对对象象撤撤消消,其其析析构构函函数数被被调调用用Ex1Ex1类类的的对对象象撤撤消消,其其析析构构函函数数被被调用调用第31页,此课件共37页哦2.3 对象对象 2.3.1 2.3.1 对象的声明对象的声明 2.3.2 2.3.2 对象的使用对象的使用2.3.52.3.5 对象的深入理解对象的深入理解 第32页,此课件共37页哦2.3.1对象的声明对象的声
25、明 int i;/int i;/声明一个整型对象声明一个整型对象i i,该对象占有,该对象占有3232个字节的空间个字节的空间 char ch;/char ch;/声明一个字符对象声明一个字符对象chch,该对象占有,该对象占有1 1个字节的空间个字节的空间 CTime MyTime;/CTime MyTime;/声明一个日期时间对象声明一个日期时间对象MyTimeMyTimeCPoint MyPoint;/CPoint MyPoint;/声明个点对象声明个点对象MyPointMyPointCRect MyRect;/CRect MyRect;/声明一个矩形对象声明一个矩形对象MyRecctM
26、yRecct 其中其中CTimeCTime、CPointCPoint、CRectCRect是是VCVC中中MFCMFC类库中的一些通用类,这些类库中的一些通用类,这些类在实际设计程序时有着很重要的作用。类在实际设计程序时有着很重要的作用。第33页,此课件共37页哦2.3.22.3.2对象的使用对象的使用对象的使用对象的使用当声明了对象后,就可以使用该对象所隶属的类的公有当声明了对象后,就可以使用该对象所隶属的类的公有(在(在public部分定义的)成员变量和成员函数。部分定义的)成员变量和成员函数。对象的使用,对象的使用,关键是使用对象所属类的成员函数关键是使用对象所属类的成员函数,即熟悉,即
27、熟悉该类都有哪些常用的成员函数。该类都有哪些常用的成员函数。第34页,此课件共37页哦【例2-6】建立一个日期类,并且主函数中使用其公有的成员函。主文件为DefObject.cpp#include class TDatepublic:void SetDate(int year,int month,int day)m_year=year;m_month=month;m_day=day ;void ShowDate()cout The date is m_year-m_month-m_dayendl;private:int m_year;int m_month;int m_day;第35页,此课件
28、共37页哦 void main()TDate Today;/建立一个日期对象建立一个日期对象 Today.SetDate(2004,8,1);/调用设置调用设置日期的函数日期的函数Today.ShowDate();/调用显示日期的函数调用显示日期的函数 程序运行结果为:程序运行结果为:The date is 2004-8-1The date is 2004-8-1第36页,此课件共37页哦2.3.5*对象的深入理解对象的深入理解 1对象就是变量对象就是变量 2对象是封装了属性和行为的基本单位对象是封装了属性和行为的基本单位 3对象是一个有限状态自动机对象是一个有限状态自动机 第37页,此课件共37页哦