




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
- 1 - 面向对象程序设计复习纲要面向对象程序设计复习纲要 第第1 1 1 1章:章: (一)(一) C+C+C+C+对对C C C C的扩充的扩充 1、函数原型声明:函数类型函数名(参数表); 2、函数的重载:同一函数名定义多个函数,这些函数的参数个数和参数类型不同 3、有默认参数的函数: 可以只对一部分形参指定默认值 指定默认值的参数必须放在形参表列中的最右端 实参的个数可以与形参的个数不同,实参未给定的,从形参的默认值得到值。 如果函数的定义在函数调用之前,则应在函数定义中给出默认值 一个函数不能既作为重载函数,又作为有默认参数的函数。 4、引用,又称别名。 引用与其所代表的变量共享同一内存单元,编译系统不给它单独分配存储单元 区别声明引用变量还是取地址操作,看其前面有没有类型符,有必然是对引用的声明 对引用的初始化,可以用一个变量名,也可以用另一个引用 引用初始化后不能再重新声明为另一个变量的别名 5、 内置函数: inline 在编译时将所调用函数的代码直接嵌入到主调函数中 使用内置函数可以节省运行时间,但却增加了目标程序的长度。 内置函数中不能包括复杂的控制语句,如循环语句和switch语句。 只有那些规模较小而又被频繁调用的简单函数,才适合于声明为inline函数。 (二) C+程序的编写和实现 从C+源程序到可执行程序的步骤:编辑(*.cpp)、编译(*.obj)、链接(*.exe)、执行。 第第2 2 2 2章章 面向对象程序设计概述面向对象程序设计概述 面向对象系统的特性: 1 封装性: 就是把每个对象的数据和操作包装在一个类中,并尽可能隐藏对象的内部细节。 2 继承性: 是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。 3 多态性: 是指允许不同类的对象对同一消息作出的响应不相同。 第第3 3 3 3章章类和对象类和对象 类的封装性和信息隐蔽类的封装性和信息隐蔽 通过类来实现封装性,类的作用是把数据和算法封装在用户声明的抽象数据类型中 类的公用接口与私有实现的分离”形成了信息隐蔽。 构造函数构造函数 - 2 - 构造函数的名字必须与类名同名 在建立对象时自动执行构造函数。 构造函数没有返回值 系统会自动生成一个空的构造函数 构造函数可重载 析构函数析构函数 析构函数的名字是类名的前面加一个“”符号 当对象的生命期结束时,会自动执行析构函数。 析构函数不返回任何值,没有函数类型,也没有函数参数。因此它不能被重载。 一个类只能有一个析构函数。 拷贝构造函数拷贝构造函数 是一种特殊的构造函数。功能是将参数代表的对象逐一拷贝到新创建的对象中。其调用由系统自动实 现。只有一个参数,这个参数是本类对象的常引用本类对象的常引用 每个类都必须有一个拷贝构造函数,如果没定义,则系统自动产生一个缺省的。 堆对象,堆对象,是在程序运行时根据需要随时可以被创建或删除的对象。通过new自动调用构造函数创建对象,用 delete自动调用析构函数,释放对象。 静态成员:静态成员:staticstaticstaticstatic 1 1 1 1 静态数据成员静态数据成员 在内存中只占一份空间。在程序编译时分配空间,到程序结束时才释放空间。 既可以通过对象名引用,也可以通过类名和域运算符“” 来引用。 只能在类体外进行初始化。如果未赋初值,则编译系统会自动赋予初值0。 2 2 2 2 静态成员函数静态成员函数 静态成员函数,在类外调用公用的静态成员函数,要用类名和域运算符“”。 没有没有thisthisthisthis指针。指针。 静态成员函数与非静态成员函数的区别: 非静态成员函数有this指针,而静态成员函数没有this指针。 静态成员函数可以直接引用本类中的静态数据成员。 对本类中的非静态成员不能进行默认访问。如果一定要引用本类的非静态成员,应该加对象名和成员 运算符“.”。 thisthisthisthis指针指针 * 指向本类对象的指针 * 值为当前被调用的成员函数所在的对象的起始地址 * 静态成员函数没有this指针 - 3 - 友元友元 friendfriendfriendfriend,用于不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享 1 1 1 1 友元函数友元函数 将普通函数声明为友元函数 友元成员函数:声明的时候,要加上成员函数所在的类名和域运算符“”。 如:friend void Timedisplay(Date 2 2 2 2 友元类:友元类: friendfriendfriendfriend 类名;类名; 两点说明: (1) 友元的关系是单向的而不是双向的。 (2) 友元的关系不能传递。 第第 4 4 4 4 章章 派生类与继承派生类与继承 派生类对基类成员的访问权派生类对基类成员的访问权: public 保持、private 私有、protected 保护 派生类构造函数的调用顺序派生类构造函数的调用顺序: : : : 首先是虚虚基类构造函数、基类构造函数、子对象构造函数基类构造函数、基类构造函数、子对象构造函数、最后是派生类构造函数派生类构造函数 注意注意: 各个基类构造函数的执行顺序取决于定义派生类时所指定的各个基类的顺序, 而与派生类构造函数 的成员初始化列表中给定的基类顺序无关。 派生类构造函数使用中应注意的问题 1在基类中定义了默认构造函数或者没有定义任何构造函数时,派生类构造函数中省略对其基类构 造函数的调用。 2当基类的构造函数使用一个或多个参数时,派生类必须定义构造函数,提供将参数传递给基类构 造函数的途径。 虚基类虚基类 1作用:保证多级继承中,间接共同基类时只有一份同名成员。 2虚基类的构造函数(带参数情况) 虚基类所有的直接或间接派生类的构造函数的成员初始化列表中都要列出该虚基类构造函数的调用。 只有用于建立对象的那个最派生类的构造函数调用虚基类的构造函数。 虚基类的构造函数先于非虚基类的构造函数的执行。 赋值兼容规则:赋值兼容规则:在需要基类对象的任何地方都可以使用公有派生类的对象来替代。 赋值兼容规则替代的3种情况: * 派生类的对象可以赋值给基类对象 * 派生类的对象可以初始化基类的引用 * 派生类对象的地址可以赋给基类类型的指针 在替代之后,派生类对象就可以做为基类的对象使用,但只能使用从基类继承的成员 第第5 5 5 5章章多态性多态性 - 4 - 多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数。 多态性分为静态多态性和动态多态性,静态多态性是通过函数的重载实现的。静态多态性又称编译时的 多态性。动态多态性是通过虚函数实现的。又称运行时的多态性。 运算符重载运算符重载 1. 运算符的重载的形式:operator (); 2. 只有以下5种运算符不能重载:. (成员访问运算符) .* (成员指针访问运算符) (域运算符) sizeof(长 度运算符)?: (条件运算符)。 3. 运算符重载遵循着“四个不变”的原则:优先级不变结合性不变操作数个数不变语法结构不变 4.两种运算符重载方式的比较: 重载为类的成员函数时,函数的参数个数比原来的操作数要少一个(后置“+”、“-”除外)重载为类的友 员函数时,参数个数与原操作数个数相同。 类型转换类型转换 转换构造函数:是将一个其他类型的数据转换成一个类的对象。转换构造函数:是将一个其他类型的数据转换成一个类的对象。 使用转换构造函数将一个指定的数据转换为类对象的方法如下: (1) 先声明一个类。 (2) 在这个类中定义一个只有一个参数的构造函数,参数的类型是需要转换的类型,在函数体中指 定转换的方法。类名类名( ( ( (其他数据类型其他数据类型 变量名变量名) ) ) )函数体函数体 (3) 在该类的作用域内可以用以下形式进行类型转换:类名类名( ( ( (指定类型的数据指定类型的数据) ) ) ) 就可以将指定类型的数据转换为此类的对象。 类类型转换函数类类型转换函数:是将一个类的对象转换成另一类型的数据。是将一个类的对象转换成另一类型的数据。 类型转换函数的一般形式为:operatoroperatoroperatoroperator 类型名类型名( ( ( ( ) ) ) )实现转换的语句实现转换的语句 虚函数虚函数 1. 1. 1. 1. 使用方法使用方法 (1) 在基类用 virtual 声明成员函数为虚函数。 在类外定义虚函数时,不必再加 virtual。 (2) 在派生类中重新定义此函数, 要求函数名、 函数类型、 函数参数个数和类型全部与基类的虚函数相同, 并根据派生类的需要重新定义函数体。 当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。如果在派生类中没 有对基类的虚函数重新定义,则派生类简单地继承其直接基类的虚函数。 (3) 定义一个指向基类对象的指针变量,并使它指向同一类族中需要调用该函数的对象。 (4) 通过该指针变量调用此虚函数,此时调用的就是指针变量指向的对象的同名函数。 2. 2. 2. 2. 纯虚函数纯虚函数: : : : 在声明虚函数时被“初始化”为 0 的虚函数。 virtualvirtualvirtualvirtual 函数类型函数类型 函数名函数名 ( ( ( (参数表列参数表列) ) ) ) =0;=0;=0;=0; - 5 - 纯虚函数没有函数体 纯虚函数只有函数名而不具备函数的功能,不能被调用。 纯虚函数的作用是在基类中为其派生类保留一个函数的名字。 如果在一个类中声明了纯虚函数,而在其派生类中没有对该函数定义,则该虚函数在派生类中仍然为 纯虚函数。 3. 3. 3. 3. 虚析构函数:虚析构函数:将基类的析构函数声明为虚函数时,由该基类所派生的所有派生类的析构函数也都自动成为 虚函数。 虚析构函数能保证在撤销动态分配空间时能得到正确的处理。 构造函数不能声明为虚函数。 抽象类:包含纯虚函数的类抽象类:包含纯虚函数的类 抽象类不能定义对象,但是可以定义指向抽象类数据的指针变量。当派生类成为具体类之后,就可以 用这种指针指向派生类对象,然后通过该指针调用虚函数,实现多态性的操作。 抽象类的作用是作为一个类族的共同基类,或者说,为一个类族提供一个公共接口。 如果在抽象类所派生出的新类中对基类的所有纯虚函数进行了定义,那么这些函数就被赋予了功能, 可以被调用。这个派生类就不是抽象类,而是可以用来定义对象的具体类。 第第 6 6 6 6 章章 模板模板 类是对象的抽象,而模板又是类的抽象,也就用模板能定义出具体类 模板分为函数模板和类模板。 函数模板函数模板: template 只适用于函数的参数个数相同而类型不同,且函数体相同的情况。 函数模板的参数个数至少一个。 标准模板库标准模板库(STL)的代码分为三类:算法、容器、迭代器。 第第 7 7 7 7 章章 C+C+C+C+的的 I/OI/OI/OI/O 流流 头文件头文件: 基本输入输出: istream文件输入输出:fstream 的重载的重载:ostream = 题型:题型: 一、单项选择题一、单项选择题 (2*10(2*10(2*10(2*10,共,共 20202020 分分) ) ) ) 二、多项选择题二、多项选择题 (2*5(2*5(2*5(2*5,共,共 10101010 分分) ) ) ) 三、填空题(三、填空题(2*102*102*102*10,共,共 20202020 分)分) 四、程序分析题四、程序分析题 (5*4(5*4(5*4(5*4,共,共 20202020 分分) ) ) ) 五、完成程序题五、完成程序题 (5*3(5*3(5*3(5*3,共,共 15151515 分分) ) ) )(完整程序去掉两行,补充完整)(完整程序去掉两行,补充完整) 六、编程题六、编程题 ( ( ( (本大题共本大题共 2 2 2 2 小题,第一题小题,第一题 5 5 5 5 分,第二题分,第二题 10101010 分,共分,共 15151515 分分) ) ) ) 具体题型样式,参考课件中的练习内容。具体题型样式,参考课件中的练习内容。 = - 6 - 四、五部分侧重考核知识点:四、五部分侧重考核知识点: 多继承下构造函数/析构函数的调用顺序 继承机制下构造函数的重载 虚函数 友元及静态成员 类的声明和对象的定义(包括成员函数的类内和类外定义等) 运算符重载 = 【例】【例】多继承下构造函数多继承下构造函数/ / / /析构函数的调用顺序析构函数的调用顺序 include iostream.h class A public: A()coutA.endl; A()coutdel .Aendl; ; class B public: B()coutB.endl; B()coutdel.Bendl; ; class C:publicA,virtual public B public: C()coutC.endl; C()coutdel.Cendl; ; class D:publicA,virtual public B public: D()coutD.endl; D()coutdel.Dendl; ; class E:public C,public D public: E()coutE.endl; E()coutdel.Eendl; ; int main() E e; return 0; 输出的结果: B. A. c. A. D. E. del.E del.D del.A del.C del.A del.B 分析:这个用虚基类的构造函数的调用,如在类 C 和类 D 都同时多继承了类 A 和类 B,但是 B 类的前面 都有 Virtual ,这个为虚基类,只调用一次,在初始化的时候,在显示的结构在初始化类 D 的基类时,类 B 就 没有在初始化,还有加上 Virtual 的类是首先执行的,最后是调用析构函数,只要你对构造函数理解了,这个 也是比较好理解,他就跟构造函数初始化的顺序是相反的。 = 【例】【例】运算符重载运算符重载 #include iostream.h /友元函数永远比成员函数重载多一个参数。友元函数有 4 个符号不能重载,分别是=,(),- /成员函数不能重载和; class C public: C()val=0; C(int i)val=i; C operator+();/前缀+ C operator+(int);/后缀+ friend C operator-(C/前缀- friend C operator-(C /重载二元加(减) friend C operator+(C c1,C c2); /显示 void display()coutval:valendl; private : int val; ; /前缀+ C C:operator+() val+; return val; /后缀+ C C:operator+(int) C temp; temp=val+; return temp; /以下是用到友元函数 - 7 - /前缀- C operator-(C return c; /前缀- C operator-(C temp=c.val-; return temp; / C operator+(C c1,C c2) C temp; temp.val=c1.val+c1.val; return temp; / int main() C c(5),n,num; +c; c.display(); n=c+; n.display(); c.display(); n=c-; n.display(); c.display(); num=c+n; num.display(); return 0; 运行的结果: val:6 val:6 val:7 val:7 val:6 val:12 分析结果:运算符的重载,该例子只要是用于+、-、+,-的重载。这个只要是用到友元函数和成员函数的区 别。 = 六、编程题六、编程题 1、运算符重载(只考察) #include iostream.h class A public: A()x=0,y=0; void display() coutxy(istream friend ostream return s; ostream couta; return 0; = 2、结合类的声明和对象的定义(包括成员函数的类内和类外定义等) ,继承机制下构造函数的重写,基类公 用成员函数的调用。 如 1:基类 A 有某个成员函数 AA,基类 B 也有个成员函数 AA,二者公用派生出派生类 C,如何重写 C 的构造函数初始化 A,B,C 也有成员函数 AA,分别调用 A,B 的 AA 函数。 #include iostream.h class A public: A(int x)val=x; void fun()coutvalendl; private: int val; ; class B public: B(int x)val=x; void fun()coutvalendl; private: int val; ; class C:publicA,public B public: C(int a,int b,int c):A(a),B(b),val(c) - 8 - void fun() A:fun(); /调用 A 的 fun 的函数 B:fun(); /调用 B 的 fun 的函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 7-1《短歌行》教学设计 2024-2025学年统编版高中语文必修上册
- 校园消防安全检查简讯(3篇)
- 淮南校园消防安全教育(3篇)
- 第五单元第13课西欧经济和社会的发展2025-2026学年九年级上册历史同步说课稿(部编版)
- 户籍档案培训课件
- 校园消防安全管理总结(3篇)
- 网络搭建基础知识培训课件
- 道路交通安全工作汇报
- 光放大器性能基准测试-洞察及研究
- 建筑方案设计包括哪些部分(3篇)
- 文档管理与归档制度
- 《幼儿园教师家庭教育指导能力现状调查》
- 华东师大版八年级下册数学全册教案(2022年12月修订)
- 消防文员合同模板
- 锁骨骨折内固定术的护理
- DB41T 2599-2024 煤矿地震监测站网技术规范
- 三甲医院临床试验机构-31 V00 专业组备案及考核SOP
- 电缆相关项目实施方案
- 山东畜产品质量安全检测(抽样员)职业技能竞赛理论考试题及答案
- (新版)区块链应用操作员职业技能竞赛理论考试题库-下(多选、判断题)
- 短视频创意内容定制合同
评论
0/150
提交评论