《面向对象程序设计》ppt课件1初中信息技术.ppt
第2章 面向对象程序设计,2.1面向对象程序设计思想 2.2 类2.3对象,2.1 面向对象程序设计思想,面向对象程序设计的特点1抽象性用C+语言可以将该图形描述如下:圆形(circle):数据抽象:double x,y,r;行为抽象:setx();sety();setr();draw();,抽象是面向对象方法的核心。2封装性3继承性 4多态性多态性也是面向对象程序设计的重要特性之一。,1.抽象,抽象是指从具体的实例中抽取出来共同的性质并加以描述的过程,它忽略了一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。,抽象过程:先注意问题的本质及描述,其次是实现过程或细节。数据抽象:描述某类对象的属性或状态(对象相互 区别的物理量)。代码抽象:描述某类对象的共有的行为特征或具有 的功能。抽象的实现:通过类的声明,抽象实例钟表,数据抽象:int Hour,int Minute,int Second 代码抽象:SetTime(),ShowTime(),科目一考试 驾驶员理论考试科目二考试 场地考试科目三考试 实际道路考试科目四考试 安全文明驾驶常识考试2016年驾驶员试题网学车试题大全,抽象实例钟表类,class Clock public:void SetTime(int NewH,int NewM,int NewS);void ShowTime();private:int Hour,Minute,Second;,2 封装,封装指的是将方法和数据放于同一对象中,使得对数据的存取只能通过该对象本身的方法来进行。主要思想是将数据(数据成员)及处理这些数据的相应函数(成员函数)封装到类class中(C+的一种新的定义数据类型的方法),而使用类的变量则称为对象(object),在对象内,只有属于该对象的成员函数才可以存取该对象的数据成员。这样,其他函数就不会破坏到它的内容,从而起到保护和隐藏数据的效果。,将抽象出的数据成员、代码成员相结合,将它们视为一个整体。目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。实现封装:类声明中的,实例,3继承,继承是一种联结类与类之间的层次模型,它允许和鼓励类的重用,提供了一种明确表达共性的方法。一个新类可以从现有的类中派生,这个过程称为类继承 继承性很好地解决了软件的可重用问题 实现:声明派生类,4多态,多态性指的是同一消息被不同的对象接收后被解释为不同含义的能力,也就是一个接口名称具有多种功能。即同一名称,不同的功能实现方式。多态性语言具有语言灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名的问题。目的:达到行为标识统一,减少程序中标识符的个数。实现:重载函数和虚函数,2.2面向对象的基石类,2.2.1 从结构到类2.2.2 类的定义 2.2.3 构造函数 2.2.4 析构函数,2.2.1从结构到类,1结构体 VC不仅提供了大量预先定义的数据类型,而且还支持自定义的数据类型。结构就是把相互关联的一些基本数据类型的元素组成一个新的独立统一体。,【例2-1】定义一个职工Employee结构数据类型,它包括姓名、工资、地址、移动电话。struct Employeechar name9;float salary;char address40;char mobile12;,定义一个结构体,事实上是定义了一种数据类型,程序并不会给类型分配内存,内存分配是发生在结构体变量上,#include iostream.h#include string.hvoid main()struct Employee EmployeeA;strcpy(EmployeeA.name,灭绝师太);EmployeeA.salary=168.47;strcpy(EmployeeA.address,峨眉山上);cout EmployeeA.name已经领上工资了,其数目是 EmployeeA.salaryendl;cout要想拜谒她,请到 EmployeeA.address或直接传呼 EmployeeA.mobileendl;,【例2-2】定义一个具体职工EmployeeA,并对该职工进行赋值。程序的主文件名为DefStru.cpp。,程序的运行结果是:灭绝师太已经领上工资了,其数目是168.47要想拜谒她,请到峨眉山上或直接传呼,2类类是从一个个具体的事物中把共同特征抽取出来形成的一个概念,它反映了事物之间的共性 在C+中,在类的定义中,不仅有反映事物属性的成员变量,还有反映属性操作的成员函数。类一种自定义数据类型。,2.2.2类的定义,在C+中类的定义方式为:class 类名private:私有数据及成员函数;protected:保护数据及成员函数;public:公有数据及成员函数;;,class是类定义符,类名是一种标识符,它的命名规则与变量名的命名规则相同。一对花括号内是类的说明部分,说明该类的成员。类的成员包括成员变量和成员函数两部分。上述在类的成员变量和成员函数前面出现的关键字public(公有)、private(私有)或protected(保护)表示成员的访问属性。在类中声明的成员变量若不特别指明,都被视为私有类型。私有类型的数据只允许类本身声明的函数对其进行存取,而类外部的任何函数都不能访问。公有类型的成员可以被任何函数来访问,它们是类与外部的接口。,类的定义反映了对类的描述,定义一个类就是定义一种数据类型,把握类的定义首先要掌握类中包含反映事物属性的那些成员变量和反映事物操作的那些成员函数。【例2-3】定义一个职工TEmployee类,它包括姓名、工资、地址、移动电话数据成员和两个成员函数,分别实现输入职工数据和显示职工属性。,class TEmployeepublic:void input(char*name,float salary,char*address,char*mobile);void display();private:char m_name9;float m_salary;char m_address40;char m_mobile12;,【例2-4】定义一个交通工具类TVehicle,它具有轮子个数、载重两个数据成员和三个成员函数,分别实现输入交通工具的轮子和载重、取轮子个数和载重。,class TVehiclepublic:void Initialize(int wheels,float weight);/交通工具的初始化int GetWheels(void);/取轮子个数float GetWeight(void);/取载重private:int m_wheels;/轮子个数float m_weight;/载重;,构造函数,构造函数的作用是在对象被创建时使用特定的 值构造对象,或者说将对象 初始化 为一个特定的状态。在对象创建时 由系统自动调用。如果程序中未声明,则系统自动产生出一个 默认形式 的构造函数。允许为 内联 函数、重载 函数、带默认形参值 的函数。,构造函数举例,class Clock public:Clock(int NewH,int NewM,int NewS);/构造函数 void SetTime(int NewH,int NewM,int NewS);void ShowTime();private:int Hour,Minute,Second;,构造函数举例,构造函数的实现:Clock:Clock(int NewH,int NewM,int NewS)Hour=NewH;Minute=NewM;Second=NewS;建立对象时构造函数的作用:int main()Clock c(0,0,0);/隐含调用构造函数,将初始值作为实参。c.ShowTime();,拷贝构造函数,拷贝构造函数是一种特殊的构造函数,其形参为本类 的对象引用。class 类名 public:类名(形参);/构造函数 类名(类名&对象名);/拷贝构造函数.;类名:类名(类名&对象名)/拷贝构造函数的实现 函数体,析构函数,完成对象被删除前的一些清理工作。在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间。如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数。,【例2-5】一个包含构造函数和析构函数的例子。程序的主文件为 ConstructorExam.cpp。,#include#include class Exlprivate:int x;public:Exl()coutEx1 类的对象建立,其构造函数被调用n;Exl()coutEx1类的对象撤消,其析构函数被调用n;void setdata(int i)x=i*2;/在类中定义成员函数setdata()void print();/类Exl定义结束,class Ex2int y;public:Ex2()coutEx2 类的对象建立,其构造函数被调用n;Ex2()coutEx2类的对象撤消,其析构函数被调用n;void setdata(int j)y=j*j;void print();/类Ex2定义结束void Ex2:print()coutclass Ex2:setw(6)y n;/成员函数print()定义结束,void main()Exl s;Ex2 t;s.setdata(5);s.print();t.setdata(5);t.print();,程序运行结果为:Ex1 类的对象建立,其构造函数被调用Ex2 类的对象建立,其构造函数被调用class Exl:10class Ex2:25Ex2类的对象撤消,其析构函数被调用Ex1类的对象撤消,其析构函数被调用,2.3 对象,2.3.1 对象的声明 2.3.2 对象的使用 对象的深入理解,2.3.2对象的使用,当声明了对象后,就可以使用该对象所隶属的类的公有(在public部分定义的)成员变量和成员函数。对象的使用,关键是使用对象所属类的成员函数,即熟悉该类都有哪些常用的成员函数。,【例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;,void main()TDate Today;/建立一个日期对象 Today.SetDate(2004,8,1);/调用设置日期的函数Today.ShowDate();/调用显示日期的函数 程序运行结果为:The date is 2004-8-1,