




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十四-十七章C+面向对象概述主要内容 面向对象程序设计根底面向对象程序设计根底 承继性与派生类承继性与派生类 多态性与虚函数多态性与虚函数 Visual C+ 6.0运用程序举例运用程序举例一、面向对象程序设计根底一、面向对象程序设计根底 C+是C的超集 C+不仅仅是一种面向对象的程序设计言语,而且也可以开发面向过程的程序。 引见: 类和对象的定义, 如何运用对象处理实践问题1.类和对象 类和对象的引入,使类和对象的引入,使C+真正成为支持面向对象程序真正成为支持面向对象程序设计的言语。设计的言语。 类就像蓝图类就像蓝图 对象是类的详细实例对象是类的详细实例 对象最终要经过类实例化!对象最终
2、要经过类实例化! C+程序中的重点是类而不是函数。程序中的重点是类而不是函数。 类是程序员定义类型。每个类包含数据和操作数据的类是程序员定义类型。每个类包含数据和操作数据的一组函数。类的数据部分称为数据成员一组函数。类的数据部分称为数据成员data member,类的函数部分称为方法,类的函数部分称为方法method,有,有的时候也称为成员函数。的时候也称为成员函数。 先声明类,再由类生成其对象。先声明类,再由类生成其对象。 类是建立对象的模板,对象那么是类的一个实例。类是建立对象的模板,对象那么是类的一个实例。2.从构造体到类从构造体到类 C的构造体中可以包含不同的数据类型。 在C言语中,数
3、据和操作是分开的! C+言语把构造体进展扩展 含有不同的数据类型 含有函数 类是一种封装了数据和对数据进展操作的自定义的数据类型。3.类的定义方式class 类名private: 私有成员public: 公有成员protected: 维护成员;4.对象的定义对象的定义 对象是类的实例,对象的定义有下面两种情况: 声明类时直接定义对象 在声明类的右括号“后直接列出对象名,并且可以定义多个对象。对象之间用“,隔开,并且在最后一个对象的后边添加一个“; 声明类之后再定义对象 定义方式与普通变量定义一样。其根本方式为: 类名 对象;5.对象的运用 对象的定义完成以后就可以在程序中运用该对象。 其类型为
4、公有public,在类的外部都可以经过对象进展访问。访问的方式如下: 对象名.数据成员 对象名.函数成员实参列表 留意:对于类的包含成员和私有成员,类的对象并不能直接访问。因此普通情况下都会 利用一定的接口对类的包含成员和私有成员进展访问。 参看书上例如14.1、14.26.对象的初始化、构造函数和析构函数 对象也被称为类变量。 作为变量,对象可以为其数据成员赋初值。 对象的初始化 有多种不同的方式。 假设一个类只需公共数据成员,那么其对象的初始化与普通变量、构造变量或数组的初始化没有什么区别,在生成对象后设置其数值。 在C+中,对象中数据成员的初始化最常用的方法是在构造函数中完成。7.构造函
5、数 构造函数是一种特殊的成员函数,是与类名同名的成员函数。 构造函数在每次生成对象实例化,运用new关键字时自动调用,进展一些初始化任务。 构造函数可以重载,提供初始化对象的不同方法。8.构造函数性质 构造函数和类的名字一样。 构造函数不具有前往值。 定义对象时,系统根据提供的参数自动调用构造函数。 构造函数是公有函数,但它不可以被显式调用。9.程序讲解 例如14.3 例如14.4 程序中假设定义了构造函数,无论它能否带有参数,系统不会再添加构造函数。因此,假设此时的构造函数带有参数,并且没有指定默许值,那么在创建对象时必需指定参数。10.析构函数 析构函数也是一种特殊的成员函数,它执行和构造
6、函数相反的任务。 析构的特殊性质: 析构函数称号与类名一样,但前面加一个“。 一个类中只需一个析构函数,并且该函数不带任何参数。 当撤销对象时编译系统自动调用析构函数。 假设程序员没有定义析构函数,编译系统会生成析构函数。11.构造函数和析构函数的调用机制 构造函数和析构函数都是自动调用的。 构造函数由于可以重载,可以有多个,经过参数的不同而确定调用哪一个; 而析构函数只需一个。 构造函数和析构函数的调用次序取决于执行过程进入和分开实例化对象范围的顺序。 当有多个对象被嵌套运用的时候,普通来说,析构函数的调用次序与构造函数相反。12.类的包含和子对象的初始化 一个类的对象可以是另一个类的成员,
7、称为类的包含有时也称为复合,作为成员的对象称为子对象。 例如: class A class B A a ; / 子对象 public; ; 其中,类A的对象a是B的一个成员,对象a称为B的成员对象或子对象,类B和类A构成包含关系。13.对象的运用 类是一种数据类型,是对象类型,对象是一种变量,是类变量。 各种类型变量的运用方法同样适用于对象, 对象指针 对象数组 对象作为函数的参数14.对象的作用域与生命周期 按照作用域和生命周期,可将对象分为如下三类: 全局对象 作用域最大,有文件级和程序级作用域;生命期最长。 部分对象 函数的形参以及函数内部声明的对象都是部分对象。 部分对象的作用域最小,
8、生命周期是函数的执行过程。 静态对象 C+运用static声明静态变量。静态对象的作用域和生命期介于全局对象和部分对象之间。其作用域为块级、函数级或文件级。15.静态成员 静态成员的提出是为理处理数据共享的问题。 静态数据成员的运用方法: 静态数据成员在定义或阐明时前面加关键字static。 静态数据成员初始化的格式如下: :=16.静态数据成员的运用#includeclass Myclasspublic:Myclass(int a, int b, int c);void GetNumber();void GetSum();private:int A, B, C;static int Sum;
9、int Myclass:Sum = 0;Myclass:Myclass(int a, int b, int c)A = a;B = b;C = c;Sum += A+B+C;void Myclass:GetNumber()coutNumber=A,B,Cendl;void Myclass:GetSum()coutSum=Sumendl;void main()Myclass M(3, 7, 10),N(14, 9, 11);M.GetNumber();N.GetNumber();M.GetSum();N.GetSum();17.友元 友元: 需求在类的外部访问类的私有成员。 类的友元函数在类范围
10、之外定义,但有权访问类私有private成员。 函数或整个类都可以声明为另一个类的友元。18.友元的运用 友元函数: 在类的定义中声明友元函数时,需求在函数名前面加上friend。 友元函数可以定义在类的内部,也可以在类的外部定义。 友元成员 一个类的成员函数也可以作为另一个类的友元。这样的函数不仅可以访问本类的一切成员,还可以访问其友元类的一切成员。 友元类 在类的声明中参与语句friend类名。 例如: 要将类ClassB声明为ClassA的友元,在ClassA的定义中应如下声明: friend class ClassB;二、承继性与派生类1.承继概述 承继对面向对象编程至关重要。 承继在
11、原有类的根底上定义出新的类,新类不仅拥有新定义的数据成员和函数成员,而且自动承继并拥有原有类的数据成员和函数成员。2.基类与派生类 基类 原有的类称为基类或父类 派生类 新类称为派生类或子类。 单一承继 派生类只需一个基类。 多重承继 派生类经常是从多个基类派生出来的,这些基类之间能够毫无关系。 单一承继比较简单,多重承继更复杂,3.单一承继 单一承继 从一个基类中派生出的承继称为单一承继。 单一承继派生类的定义方式如下: class 派生类名:承继方式 基类名 派生类新定义的成员 ; 派生类名是由基类派生出来的派生类的名字。 基类即能够是派生类的直接基类,也能够是派生类的间接基类。 在定义派
12、生类时,派生类的首部要显示的列出直接基类。 间接基类不是显示的列在派生类的首部,而是沿着类的多个层次逐次向上承继。4.承继方式5.多重承继 一个类也可以从多个基类派生而来,这种派生称之为多重承继。 多重承继的定义方式如下: class 派生类名:承继方式1 基类名1,承继方式2 基类名2,.,承继方式n 基类名n 派生类新定义的成员 ; 在多重承继定义中,必需给每个基类分别指定承继方式,承继方式和基类成员的访问权限共同决议基类成员在派生类中的访问权限,其规那么与单一承继一样。6.多重承继中的歧义 运用多重承继会影响到类中成员的查找。 当派生类定位一个成员的时候,一切的直接基类会被同时查找,假设
13、从两个或多个基类中承继了同名的成员,那么添加了歧义援用的能够性。 处理方法: 在程序层次上,处理成员歧义的方案是用类操作符显示限定修饰“期望被调用的成员属于哪个实例。 类设计者完成 参看例如15.77.承继中的一个问题 当派生类D的两个基类B和C都从一个公共基类A派生而来,创建类D的对象时会创建两个类A的一样副本,即此时每一个D的对象都会有含有两个A的对象。 效率上存储两个A对象的副本,浪费了存储空间; D对象中存在两个A对象会引起歧义。任何未经修饰的访问D中的成员A对象都会产生编译时辰的错误:究竟访问哪个呢? 假设B和C对其A子对象的初始化有不同的时候,又会如何?8.虚拟承继 虚拟承继 只需
14、一个共享的基类子对象被承继 无论该基类在承继层次中出现多少次。 这个共享的基类被称之为“虚基类。9.虚基类 对于上面的例子, 声明派生类B和类C时,将公共基类A声明为虚基类, 由类B和类C派生出来的类D在创建对象时将只建立公共基类A的一个副本。 在声明派生类时,虚基类的声明方式如下: class 派生类名:virtual 承继方式 基类名 派生类新定义的成员 ; 关键字virtual声明基类为虚基类,多重承继时,每一个虚基类都需求一个关键字virtual。三、多态性与虚函数1.多态性与虚函数 多态性是指同一对象接受一样的音讯时产生不同行为,即对应一样的函数名却执行不同的函数体。 在C+中,多态
15、性主要经过两类三种方式实现。 第一类:静态多态静态联编的多态、编译时多态 有两种实现方式: 运算符重载 函数重载 第二类:动态多态动态联编的多态、运转时多态 有一种实现方式: 虚函数2.运算符重载 为已有的运算符定义新的功能,使得同一个运算符作用于不同类型数据时产生不同的行为。 为自定义的数据类型定义运算符。 经过定义成员函数或友元函数来实现。3.运算符重载的几个概念可以重载的运算符可以重载的运算符多数运算符都可以重载,只需以下几个运算不可以重载:多数运算符都可以重载,只需以下几个运算不可以重载:. 圆点运算符圆点运算符?: 三目运算符三目运算符.* 成员指针选择成员指针选择Sizeof 测试
16、数据长度运算符测试数据长度运算符: 作用域运算符作用域运算符typeof 测试数据类型运算符测试数据类型运算符运算符重载的限制运算符重载的限制原有特性不变原有特性不变操作数个数不变;操作数个数不变;优先级不变;优先级不变;结合性不变;结合性不变;语义不变语义不变留意:留意:通常不随意改动重载运算符的功能含义。通常不随意改动重载运算符的功能含义。定义运算符重载的函数时不能设置默许值。定义运算符重载的函数时不能设置默许值。只能运用只能运用C+已有的运算符,不可本人发明新的运算符。已有的运算符,不可本人发明新的运算符。4.运算符重载实现 运算符重载为成员函数的定义方式: operator () 运算
17、符重载为友元函数的定义方式: friend operator () 5.静态联编和动态联编 将程序中的函数调用解释为执行特定的函数体被称为联编(binding)。按照联编所进展的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。 静态联编: 联编任务出如今编译衔接阶段,在编译时进展。 动态联编: 在程序运转时进展联编。 如何来确定是静态联编还是动态联编呢? C+规定动态联编是在虚函数的支持下实现的。6.静态联编 静态联编的函数重载主要有两种方式: 在同一个类中重载函数, 基类成员函数在派生类中重载。7.函数重载 函数重载function overloading C+允许定义多个同名函数,
18、只需这些函数有不同的参数列表至少有不同类型的参数。 在静态联编的时候,C+经过签名进展区别。 签名是函数名和参数类型的组合。 留意: 全局函数和类的成员函数同名不算重载,由于函数的作用域不同。8.成员的重载 成员函数被重载的特征: 一样范围在同一个类中; 函数名字一样; 参数不同个数、类型、顺序; virtual关键字可有可无。 class A public:/show(int,int); show(double); show(double,int); /重载函数参数类型和个数不同9.基类成员函数在派生类中重载 在派生类中重载基类中的成员函数,本质还是成员函数的重载10.动态联编 C+中动态联编是在虚函数的支持下实现的。 运用虚函数的时候,在程序编译阶段无法确定该函数调用应执行哪一段函数代码,只需在程序运转过程中执行到这个调用时,才干确定执行哪一段函数代码的联编方式动态联编,这是动态多态的实现原理。11.虚函数 虚函数的声明方法是在基类的函数原型前加上关键字virual。 虚
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机器人清洁服务创新创业项目商业计划书
- 输液反应和急救措施
- 知识管理(KM)创新创业项目商业计划书
- 橡胶鞋材生产创新创业项目商业计划书
- 网红短视频内容创作工具创新创业项目商业计划书
- 智能柜台银行服务系统创新创业项目商业计划书
- 电影海报电商创新创业项目商业计划书
- 渔业养殖的气象服务创新创业项目商业计划书
- 水产品品牌国际化战略咨询创新创业项目商业计划书
- 2025年环保产业园区绿色产业集聚与区域产业结构优化报告
- 建筑工程造价课程设计实例
- 幼儿园速叠杯培训
- 初中劳动教育生活技能计划
- 新初中班主任培训
- DB13T 5252-2020 HDPE内衬修复供水管道技术规程
- 2025至2030年中国真空电机行业市场行情监测及前景战略研判报告
- 2025年船舶舾装件项目市场调查研究报告
- DB31/ 741-2020碳酸饮料单位产品能源消耗限额
- 2024生产安全事故应急预案
- 矿用电机车永磁电机驱动及能量回馈系统:技术革新与应用实践
- 医院后勤管理的安全风险防控措施
评论
0/150
提交评论