




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第2章 面向对象程序设计2.1面向对象程序设计思想面向对象程序设计思想 2.2 类类2.3对象对象2.1 面向对象程序设计思想面向对象程序设计的特点面向对象程序设计的特点1抽象性抽象性用用C+语言可以将该图形描述如下:语言可以将该图形描述如下:圆形圆形(circle):数据抽象:数据抽象:double x,y,r;行为抽象:行为抽象:setx();sety();setr();draw();抽象是面向对象方法的核心。2封装性3继承性 4多态性多态性也是面向对象程序设计的重要特性之一。 抽象是指从具体的实例中抽取出来共同的性抽象是指从具体的实例中抽取出来共同的性质并加以描述的过程,它忽略了一个主题
2、中与当质并加以描述的过程,它忽略了一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。前目标有关的方面。 抽象过程: 先注意问题的本质及描述,其次是实现过程或细节。 数据抽象:描述某类对象的属性或状态对象相互 区别的物理量)。 代码抽象:描述某类对象的共有的行为特征或具有 的功能。抽象的实现:通过类的声明抽象实例钟表 数据抽象: int Hour , int Minute , int Second 代码抽象: SetTime() , ShowTime() 第第2章章 面向对象程序设计面向对象程序设计 科目一考试 km1.jsyst
3、 驾驶员理论考试科目二考试 km2.jsyst 场地考试科目三考试 km3.jsyst 实际道路考试科目四考试 km4.jsyst 安全文明驾驶常识考试2019年驾驶员试题网学车试题大全抽象实例钟表类 class Clock public : void SetTime (int NewH, int NewM, int NewS); void ShowTime (); private : int Hour,Minute,Second; ; 封装指的是将方法和数据放于同一对象中,封装指的是将方法和数据放于同一对象中,使得对数据的存取只能通过该对象本身的方法使得对数据的存取只能通过该对象本身的方法来
4、进行。来进行。 主要思想是将数据数据成员及处理这些主要思想是将数据数据成员及处理这些数据的相应函数成员函数封装到类数据的相应函数成员函数封装到类classclass中中C+C+的一种新的定义数据类型的方法),而使的一种新的定义数据类型的方法),而使用类的变量则称为对象用类的变量则称为对象objectobject),在对象内,),在对象内,只有属于该对象的成员函数才可以存取该对象只有属于该对象的成员函数才可以存取该对象的数据成员。这样,其他函数就不会破坏到它的数据成员。这样,其他函数就不会破坏到它的内容,从而起到保护和隐藏数据的效果。的内容,从而起到保护和隐藏数据的效果。 将抽象出的数据成员、代
5、码成员相结合,将它们视为一个整体。 目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只需要通过外部接口,以特定的访问权限,来使用类的成员。 实现封装:类声明中的 实例E继承是一种联结类与类之间的层次模型,它允许和继承是一种联结类与类之间的层次模型,它允许和鼓励类的重用,提供了一种明确表达共性的方法。鼓励类的重用,提供了一种明确表达共性的方法。E一个新类可以从现有的类中派生,这个过程称为类一个新类可以从现有的类中派生,这个过程称为类继承继承 E继承性很好地解决了软件的可重用问题继承性很好地解决了软件的可重用问题 E实现:声明派生类实现:声明派生类 E多态性指的是同一消息被不同的对象接
6、收后被解释多态性指的是同一消息被不同的对象接收后被解释为不同含义的能力,也就是一个接口名称具有多种功为不同含义的能力,也就是一个接口名称具有多种功能。即同一名称,不同的功能实现方式。能。即同一名称,不同的功能实现方式。E多态性语言具有语言灵活、笼统、行为共享、代码多态性语言具有语言灵活、笼统、行为共享、代码共享的优势,很好的解决了应用程序函数同名的问题。共享的优势,很好的解决了应用程序函数同名的问题。E目的:达到行为标识统一,减少程序中标识符的个目的:达到行为标识统一,减少程序中标识符的个数。数。E实现:重载函数和虚函数实现:重载函数和虚函数 2.2.1 2.2.1 从结构到类从结构到类2.2
7、.2 2.2.2 类的定义类的定义 2.2.3 2.2.3 构造函数构造函数 2.2.4 2.2.4 析构函数析构函数 1结构体 VC不仅提供了大量预先定义的数据类型,而且还支持自定义的数据类型。 结构就是把相互关联的一些基本数据类型的元素组成一个新的独立统一体。 【例【例2-12-1】 定义一个职工定义一个职工EmployeeEmployee结构数据类型,它包括结构数据类型,它包括姓名、工资、地址、移动电话。姓名、工资、地址、移动电话。struct Employeestruct Employee char name9;char name9;float salary;float salary;
8、char address40;char address40;char mobile12; char mobile12; ;定义一个结构体,事实上是定义了一种数据类型,程序并定义一个结构体,事实上是定义了一种数据类型,程序并不会给类型分配内存,内存分配是发生在结构体变量上不会给类型分配内存,内存分配是发生在结构体变量上 #include iostream.h#include iostream.h #include string.h#include string.h void main()void main() struct Employee EmployeeA;struct Employee E
9、mployeeA; strcpy(EmployeeA.name,strcpy(EmployeeA.name,灭绝师太灭绝师太);); EmployeeA.salary=168.47;EmployeeA.salary=168.47; strcpy(EmployeeA.address,strcpy(EmployeeA.address,峨眉山上峨眉山上);); strcpy(EmployeeAle;strcpy(EmployeeAle; cout EmployeeA.namecout EmployeeA.name已经领上工资了已经领上工资了, ,其
10、数目是其数目是 EmployeeA.salaryendl; EmployeeA.salaryendl; coutcout要想拜谒她,请到要想拜谒她,请到 EmployeeA.address EmployeeA.address或直接传呼或直接传呼 EmployeeAleendl; EmployeeAleendl; 【例【例2-22-2】 定义一个具体职工定义一个具体职工EmployeeAEmployeeA,并对该职工进行,并对该职工进行赋值。程序的主文件名为赋值。程序的主文件名为DefStru.cppDefStru.cpp。程序的运行结果是:程序的运行结果是:灭绝师太已经领上工资了灭绝师太已经领
11、上工资了, ,其数目是其数目是168.47168.47要想拜谒她,请到峨眉山上或直接传呼要想拜谒她,请到峨眉山上或直接传13688667755 2类类类是从一个个具体的事物中把共同特征抽取出来形成类是从一个个具体的事物中把共同特征抽取出来形成的一个概念,它反映了事物之间的共性的一个概念,它反映了事物之间的共性 在在C+中,在类的定义中,不仅有反映事物属性的成中,在类的定义中,不仅有反映事物属性的成员变量,还有反映属性操作的成员函数。员变量,还有反映属性操作的成员函数。类一种自定义数据类型类一种自定义数据类型 。在在C+中类的定义方式为:中类的定义方式为:class 类
12、名类名private: 私有数据及成员函数;私有数据及成员函数;protected: 保护数据及成员函数;保护数据及成员函数;public: 公有数据及成员函数;公有数据及成员函数;;Eclassclass是类定义符,类名是一种标识符,它的命名规是类定义符,类名是一种标识符,它的命名规则与变量名的命名规则相同。一对花括号内是类的说则与变量名的命名规则相同。一对花括号内是类的说明部分,说明该类的成员。类的成员包括成员变量和明部分,说明该类的成员。类的成员包括成员变量和成员函数两部分。成员函数两部分。E上述在类的成员变量和成员函数前面出现的关键上述在类的成员变量和成员函数前面出现的关键字字publ
13、icpublic公有)、公有)、privateprivate私有或私有或protectedprotected维护表示成员的访问属性。在类中声明维护表示成员的访问属性。在类中声明的成员变量若不特别指明,都被视为私有类型。私有的成员变量若不特别指明,都被视为私有类型。私有类型的数据只允许类本身声明的函数对其进行存取,类型的数据只允许类本身声明的函数对其进行存取,而类外部的任何函数都不能访问。公有类型的成员可而类外部的任何函数都不能访问。公有类型的成员可以被任何函数来访问,它们是类与外部的接口。以被任何函数来访问,它们是类与外部的接口。 E类的定义反映了对类的描述,定义一个类类的定义反映了对类的描述
14、,定义一个类就是定义一种数据类型,把握类的定义首就是定义一种数据类型,把握类的定义首先要掌握类中包含反映事物属性的那些成先要掌握类中包含反映事物属性的那些成员变量和反映事物操作的那些成员函数。员变量和反映事物操作的那些成员函数。E E【例【例2-32-3】 定义一个职工定义一个职工TEmployeeTEmployee类,它类,它包括姓名、工资、地址、移动电话数据成包括姓名、工资、地址、移动电话数据成员和两个成员函数,分别实现输入职工数员和两个成员函数,分别实现输入职工数据和显示职工属性。据和显示职工属性。 class TEmployeeclass TEmployee public:public
15、:void input(char void input(char * *name,float salary,char name,float salary,char * *address,char address,char * *mobile); 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_mobile1
16、2; ;【例2-4】 定义一个交通工具类TVehicle,它具有轮子个数、载重两个数据成员和三个成员函数,分别实现输入交通工具的轮子和载重、取轮子个数和载重。 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
17、);/float GetWeight(void);/取载重取载重 private:private: int m_wheels; /int m_wheels; /轮子个数轮子个数 float m_weight;/ float m_weight;/ 载重载重 ; 构造函数的作用是在对象被创建时使用特定的 值构造对象,或者说将对象 初始化 为一个特定的状态。 在对象创建时 由系统自动调用。 如果程序中未声明,则系统自动产生出一个 默认形式 的构造函数。 允许为 内联 函数、 重载 函数、 带默认形参值 的函数。 构造函数举例 class Clock public: Clock (int NewH,
18、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); / 隐含调用构造函数,将初隐含调
19、用构造函数,将初始值作为实参。始值作为实参。 c.ShowTime(); 拷贝构造函数 拷贝构造函数是一种特殊的构造函数,其形参为本类 的对象引用。class 类名 public : 类名形参); / 构造函数 类名类名 & 对象名); / 拷贝构造函数 . ; 类名 : 类名类名 & 对象名) / 拷贝构造函数的实现 函数体 完成对象被删除前的一些清理工作。完成对象被删除前的一些清理工作。 在对象的生存期结束的时刻系统自动在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间。调用它,然后再释放此对象所属的空间。 如果程序中未声明析构函数,编译器如果程序中未声明析
20、构函数,编译器将自动产生一个默认的析构函数。将自动产生一个默认的析构函数。 【例【例2-52-5】一个包含构造函数和析构函】一个包含构造函数和析构函数的例子。程序的主文件为数的例子。程序的主文件为 ConstructorExam.cppConstructorExam.cpp。 #include #include #include #include class Exlclass Exl private:private:int x;int x; public:public:Exl() coutEx1 Exl() coutEx1 类的对象建立,其构造函数类的对象建立,其构造函数被调用被调用n; n;
21、 Exl() coutEx1Exl() coutEx1类的对象撤消,其析构函数类的对象撤消,其析构函数被调用被调用n; n; void setdata(int i) x=ivoid setdata(int i) x=i* *2; /2; /在类中定在类中定义成员函数义成员函数setdata()setdata()void print();void print(); ;/;/类类ExlExl定义结束定义结束 class Ex2class Ex2 int y;int y; public:public:Ex2() coutEx2 Ex2() coutEx2 类的对象建立,其构造函数类的对象建立,其构造
22、函数被调用被调用n; n; Ex2() coutEx2Ex2() coutEx2类的对象撤消,其析构函数类的对象撤消,其析构函数被调用被调用n; n; void setdata(int j) y=jvoid setdata(int j) y=j* *j;j;void print();void print(); ;/;/类类Ex2Ex2定义结束定义结束 void Ex2:print()void Ex2:print() coutclass Ex2: setw(6)y n;coutclass Ex2: setw(6)y n; /成员函数成员函数print()print()定义结束定义结束 void
23、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 类的对象建立,其构造类的对象建立,其构造函数被调用函数被调用Ex2 Ex2 类的对象建立,其构造类的对象建立,其构造函数被调用函数被调用class Exl: 10class Exl: 10class Ex2: 25class Ex2: 25Ex2Ex2类的对象撤消,其析构函类的对象
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 微生物检验技师考试实务案例分析及试题及答案
- 2025年特许金融分析师考试分析技巧试题及答案
- 项目管理团队互信构建试题及答案
- 复习要点2025年特许金融分析师考试试题及答案
- 黑龙江鹤岗市本年度(2025)小学一年级数学统编版专题练习(下学期)试卷及答案
- 项目管理考试评估标准与试题及答案
- 2025年注会考试重要知识试题及答案
- 项目管理专业人士考试中的个人学习计划试题及答案
- 适应职场需求的注册会计师考试课程设置分析试题及答案
- 深刻理解证券从业资格证试题及答案
- 机电副矿长风险管理标准和管理措施
- 防洪工程施工组织设计+
- CAD培训课件(基础教程)
- 大学生心理朋辈技能大赛考试题库(含答案)
- DB32T 3544-2019 临床级人体组织来源间充质干细胞 质量控制管理规范
- 国药茶色素讲稿30课件
- 鲁科版五年级英语下How many ducks do you have?课件2
- 医院药品信息管理系统(DOC)
- isa-381g站用变接地保护测控装置技术使用说明书南网版v3
- 计算机应用基础(中等职业学校校本教材)
- 完整版健康管理师
评论
0/150
提交评论