版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、上海海事大学信息工程学院C+面向对象程序设计复习面向对象程序设计复习2015-1-12上海海事大学信息工程学院第第1章复习要点章复习要点v简单的简单的C+程序程序#include / 用用cout输出时需要用输出时需要用 / 此头文件此头文件using namespace std; / 使用命名空间使用命名空间stdint main() coutThis is a C+ program.n; / 用用C+的方法输出一行的方法输出一行 return 0;上海海事大学信息工程学院v 输入和输出输入和输出格式:coutendl表示结束一行数据类型v const 常量定义常量定义 const floa
2、t PI = 3.14159;占用存储单元,只读不可写v 函数原型声明函数原型声明 格式:函数类型函数类型 函数名函数名(参数列表参数列表); int max(int x, int y); 要求:函数调用之前必须对所调用的函数作函数原型声明上海海事大学信息工程学院v函数重载函数重载 定义(overload) 要求:参数个数或参数类型不同v有默认参数的函数有默认参数的函数 格式:float area(float r=6.5) 与函数重载的关系与函数重载的关系上海海事大学信息工程学院函数模版、函数重载例题函数模版、函数重载例题1、对重载函数形参的描述中,错误的是 A. 参数的个数可能不同 B. 参
3、数的类型可能不同C. 参数的顺序可能不同 D. 参数的个数、类型、顺序都相同,只是函数的返回值类型不同D上海海事大学信息工程学院v变量的引用变量的引用* 函数传值与函数传地址 对比引用与指针:对比引用与指针:P19 例例1.10&1.11v内置函数内置函数 inline 作用:空间换时间作用:空间换时间v作用域运算符作用域运算符:上海海事大学信息工程学院v字符串变量字符串变量 string 定义,与字符数组的关系定义,与字符数组的关系 赋值赋值 字符串操作:复制、连接、比较vnew和和delete运算符运算符上海海事大学信息工程学院例题例题1、对于动态分配内存空间描述正确的是 A使用n
4、ew运算符分配的内存空间的长度必需是常量 Bdelete运算符可以释放动态的存储空间和静态的存储空间C由new分配的内存空间是不连续的Ddelete运算符只能释放由new分配的动态存储空间 D上海海事大学信息工程学院什么是蓝?什么是蓝?类与对象类与对象上海海事大学信息工程学院类和对象类和对象v在在C+中,类是一种数据类型。中,类是一种数据类型。int x;class student std1; 基本数据类型基本数据类型用户定义数据类型用户定义数据类型变量(实例)变量(实例)对象(实例)对象(实例)上海海事大学信息工程学院v1.类的声明与对象的定义类的声明与对象的定义v2.类的数据成员与成员函数
5、类的数据成员与成员函数v3.对象成员的访问对象成员的访问v4.构造函数与析构函数构造函数与析构函数v5. Constv6. Staticv7. New与与deletev8. 拷贝构造函数拷贝构造函数v9. 友元友元上海海事大学信息工程学院第第2章章 要点复习要点复习v基本概念基本概念对象对象封装与信息隐蔽封装与信息隐蔽抽象抽象继承与重用继承与重用多态性多态性上海海事大学信息工程学院v声明类类型声明类类型*class CGoods private : char Name21 ; int Amount ; float Price ; float Total_value ;public : void
6、 CountTotal(void) ; ;1. class关键字关键字2. 类名类名3. 类体类体 ; 格式格式4. 类数据成员类数据成员5. 类成员函数类成员函数6. 访问限定符访问限定符 上海海事大学信息工程学院v定义对象的方法定义对象的方法 1. 先声明类类型,然后再定义对象先声明类类型,然后再定义对象 class Student stud1; Student stud1; 2. 在声明类类型的同时定义对象在声明类类型的同时定义对象 class Student stud1; 3. 不出现类名,直接定义对象不出现类名,直接定义对象 class stud1;上海海事大学信息工程学院v类与结构
7、体类型的异同类与结构体类型的异同 1.用用class声明的类如果不带成员访问限定符,声明的类如果不带成员访问限定符,所有成员默认限定为所有成员默认限定为private;2.用用struct声明的类如果不带成员访问限定符,声明的类如果不带成员访问限定符,所有成员默认限定为所有成员默认限定为public。上海海事大学信息工程学院v类成员类成员 数据成员/成员变量 - private 成员函数/成员方法 - publicinline成员函数成员函数成员函数的存储方式成员函数的存储方式上海海事大学信息工程学院v成员函数的存储方式成员函数的存储方式数据区数据区代码区代码区对象对象1对象对象数据区数据区代
8、码区代码区对象对象数据区数据区代码区代码区数据区数据区对象对象1数据区数据区对象对象数据区数据区对象对象公共代码区公共代码区上海海事大学信息工程学院v对象成员的访问对象成员的访问* 对象名+成员运算符 stud1.num =1001; 对象指针 Student *p=&stud1; pnum =1001; 对象引用 Student &s=stud1; s.num =1001;上海海事大学信息工程学院v类的封装性和信息隐蔽类的封装性和信息隐蔽 1.公用接口与私有实现的分离公用接口与私有实现的分离 2.类声明和成员函数定义的分离类声明和成员函数定义的分离P64-65 3.名词:对象
9、、方法、消息名词:对象、方法、消息 stud.display();上海海事大学信息工程学院第第3章复习要点章复习要点v 构造函数构造函数* 构造函数是特殊的公有成员函数构造函数是特殊的公有成员函数,其特征如下:,其特征如下: 1.函数名与类名相同。函数名与类名相同。2.构造函数无函数返回类型说明构造函数无函数返回类型说明。注意是什么也不。注意是什么也不写,也写,也不可写不可写void!实际上!实际上构造函数有返回值,返回的构造函数有返回值,返回的就是构造函数所创建的对象就是构造函数所创建的对象。3.在程序运行时,当新的对象被建立,该对象所属在程序运行时,当新的对象被建立,该对象所属的类的构造函
10、数自动被调用,在该对象生存期中也只调的类的构造函数自动被调用,在该对象生存期中也只调用这一次。用这一次。4.构造函数可以重载。严格地讲,说明中可以有多构造函数可以重载。严格地讲,说明中可以有多个构造函数,它们由不同的参数表区分,系统在自动调个构造函数,它们由不同的参数表区分,系统在自动调用时按一般函数重载的规则选一个执行。用时按一般函数重载的规则选一个执行。上海海事大学信息工程学院5.构造函数可以在类中定义,也可以在类外构造函数可以在类中定义,也可以在类外定义。定义。 6. 如果类说明中没有给出构造函数,则如果类说明中没有给出构造函数,则C+编译器自动给出一个编译器自动给出一个缺省缺省的构造函
11、数的构造函数:v 类名类名(void) v但但只要我们定义了一个构造函数,系统就不会自只要我们定义了一个构造函数,系统就不会自动生成缺省的构造函数动生成缺省的构造函数。v 只要只要构造函数是无参的或各参数均有缺省构造函数是无参的或各参数均有缺省值的值的,C+编译器编译器都都认为认为是缺省的构造函数,是缺省的构造函数,并且并且缺省的构造函数只能有一个缺省的构造函数只能有一个 。上海海事大学信息工程学院构造函数的重载构造函数的重载*v 缺省构造函数缺省构造函数 Time:Time() hour=0; minute=0; sec=0; Time t;v 带参数的构造函数带参数的构造函数 Time:T
12、ime(int h, int m, int s) hour=h; minute=m; sec=s; Time t(13,10,11);v 用参数初始化表用参数初始化表 Time:Time(int h, int m, int s):hour(h),minute(m),sec(s)v 使用默认参数的构造函数使用默认参数的构造函数 Time:Time(int h=13, int m=10, int s=11) hour=h; minute=m; sec=s; Time t;上海海事大学信息工程学院v 析构函数析构函数当一个对象定义时,当一个对象定义时,C+自动调用构造函数建立该对象自动调用构造函数建
13、立该对象并进行初始化,那么当一个对象的生命周期结束时,并进行初始化,那么当一个对象的生命周期结束时,C+也会自动调用一个函数也会自动调用一个函数注销注销该对象并进行善后工作,该对象并进行善后工作,这个特殊的成员函数即这个特殊的成员函数即析构函数析构函数(destructor):):1. 构函数名与类名相同,但在前面加上字符构函数名与类名相同,但在前面加上字符,如如CGoods()()。2. 析构函数无函数返回类型,与构造函数在这方面析构函数无函数返回类型,与构造函数在这方面是一样的。但析构函数不带任何参数。是一样的。但析构函数不带任何参数。3. 一个类有一个也只有一个析构函数,这与构造函一个类
14、有一个也只有一个析构函数,这与构造函数不同。析构函数可以缺省。数不同。析构函数可以缺省。4. 对象注销时,系统自动调用析构函数。对象注销时,系统自动调用析构函数。上海海事大学信息工程学院v调用构造函数和析构函数的顺序调用构造函数和析构函数的顺序上海海事大学信息工程学院构造函数和析构函数例题构造函数和析构函数例题1. 在下面有关对构造函数的描述中,正确的是在下面有关对构造函数的描述中,正确的是 。A. 构造函数可以带有返回值构造函数可以带有返回值B. 构造函数的名字与类名完全相同构造函数的名字与类名完全相同C. 构造函数必须带有参数构造函数必须带有参数D.构造函数必须定义,不能缺省构造函数必须定
15、义,不能缺省2在下面有关析构函数特征的描述中,错误的是在下面有关析构函数特征的描述中,错误的是 。A. 一个类中只能定义一个析构函数一个类中只能定义一个析构函数B. 析构函数名与类名完全相同析构函数名与类名完全相同C. 析构函数不能指定返回类型析构函数不能指定返回类型D. 析构函数不能带有参数析构函数不能带有参数3假定假定AB为一个类,则执行为一个类,则执行“AB a(4) , b3 , * p2 ;”语句时,自动调用该语句时,自动调用该类构造函数的次数为类构造函数的次数为 。A. 3 B. 4 C. 6 D. 94.对于任意一个类,析构函数的个数最多为对于任意一个类,析构函数的个数最多为(
16、B ) A.0 B.1 C.2 D.3上海海事大学信息工程学院v 对象数组对象数组对象数组的定义、初始化、建立数组的同时调用构造函对象数组的定义、初始化、建立数组的同时调用构造函数数P82 例例3.6v 对象指针对象指针*1.指向对象的指针指向对象的指针2.指向对象成员的指针指向对象成员的指针2.1.指向对象数据成员的指针指向对象数据成员的指针2.2.指向对象成员函数的指针指向对象成员函数的指针3. this指针指针 P85 例例3.7 this指针的作用指针的作用上海海事大学信息工程学院共用数据的保护共用数据的保护 Constv 对内存的使用对内存的使用只读不可写只读不可写(写在首次(写在首
17、次/初始化完成)。初始化完成)。v 常对象常对象 const Time t;或:或:Time const t;v 常数据成员常数据成员 const int hour;v 常成员函数常成员函数 void get_time() const;上海海事大学信息工程学院v指向对象的指向对象的常指针常指针 Time * const p1 = & t1;v指向指向常对象常对象的指针变量的指针变量 const Time *p1 = & t1;v对象的常引用对象的常引用 const Time &t= t1; void fun( const Time & t ); /不可改变不可改
18、变t的值的值上海海事大学信息工程学院对象的动态建立和释放对象的动态建立和释放vnew & delete Box *pt; pt = new Box; delete pt;上海海事大学信息工程学院静态成员静态成员Staticv由关键字由关键字static修饰说明的类成员,成为修饰说明的类成员,成为静态类静态类成员成员(static class member)。虽然使用)。虽然使用static修饰说明,但与函数中的静态变量有明显修饰说明,但与函数中的静态变量有明显差异。类的静态成员为其差异。类的静态成员为其所有对象共享所有对象共享,不管有,不管有多少对象,静态成员只有一份存于公用内存中。多
19、少对象,静态成员只有一份存于公用内存中。上海海事大学信息工程学院v静态数据成员静态数据成员初始化(只能在类体外进行初始化)初始化(只能在类体外进行初始化)既可以通过对象名引用,也可以通过类名来引既可以通过对象名引用,也可以通过类名来引用用v静态成员函数静态成员函数 静态成员函数没有静态成员函数没有this指针指针 静态成员函数访问静态数据成员,不访问非静静态成员函数访问静态数据成员,不访问非静态成员态成员上海海事大学信息工程学院v对象的赋值对象的赋值v对象的复制对象的复制 拷贝构造函数拷贝构造函数 类名类名 对象对象2(对象(对象1) Box:Box(const Box& b) hei
20、ght=b.height; width=b.width; length=b.length; 上海海事大学信息工程学院Static例题例题假定类假定类AB中有一个公有属性的静态数据成员中有一个公有属性的静态数据成员bb,在类外不通过对象名,在类外不通过对象名访问该成员访问该成员bb的写法为的写法为 (1) 。 静态成员(静态成员(static)属于)属于_类类_ ,而不属于,而不属于_任何一个对象任何一个对象_ ,它被,它被同一个类的所有对象共享。同一个类的所有对象共享。 上海海事大学信息工程学院v 友元友元 友元函数:友元函数: friend void display(Time &);
21、 友元成员函数:友元成员函数:friend void Time:display(Date &);v 友元类友元类 允许另一个类或函数访问你的类的东西。Class APrivate:int i=0;Friend class b /声明Class B Void main() A a1=new A(); B b1= new B(); Int j=b1.i; 可直接访问A类里的如B是A的友元类,那么a对b完全开放包括private,也就是B可以访问A里任何东西上海海事大学信息工程学院友元例题友元例题13、关于友元函数 的描述中,错误的是 A. 友元函数不是成员函数 B. 友元函数只能访问类中私
22、有成员C. 友元函数破坏隐藏性,尽量少用D. 友元函数说明在类体内,使用关键字friend B上海海事大学信息工程学院v类模版(不考)类模版(不考)上海海事大学信息工程学院第第4章复习要点章复习要点v运算符重载的方法运算符重载的方法*格式:格式: 函数类型函数类型 operator 运算符名称运算符名称(形参表列形参表列) 对运算符的重载处理对运算符的重载处理复数复数+ P122 例例4.2运算符重载的规则运算符重载的规则 P124-126上海海事大学信息工程学院v运算符重载的实现运算符重载的实现1.类成员函数类成员函数 2.友元函数友元函数 参数个数参数个数参数次序参数次序类成员函数类成员函
23、数参数个数参数个数=原操作数个原操作数个数数-1(后置(后置+、-除除外)外)左侧为类类型左侧为类类型友元函数友元函数参数个数参数个数=原操作数个原操作数个数数,且至少应该有一,且至少应该有一个自定义类型的形参。个自定义类型的形参。随意随意上海海事大学信息工程学院v双目运算符重载双目运算符重载P134 例例4.4v单目运算符重载单目运算符重载 区别区别 “前置和后置前置和后置”v重载流插入运算符和流提取运算符重载流插入运算符和流提取运算符*重点是格式重点是格式:友元函数友元函数/普通函数普通函数 istream & operator (istream & ,自定义类自定义类 &
24、amp;); ostream & operator (ostream & ,自定义类自定义类 &);上海海事大学信息工程学院v不同类型数据间的转换(不考)不同类型数据间的转换(不考)上海海事大学信息工程学院运算符重载例题运算符重载例题假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的减法,并返回相减结果,则该成员函数的声明语句为:( )A、 AB & operator - ( ) B、 AB operator -(AB & a)C、 operator -(AB a) D、 AB operator -(AB & a , AB &
25、 b)B 上海海事大学信息工程学院第第5章复习要点章复习要点v面向对象程序设计有面向对象程序设计有4个主要特点:个主要特点:1.抽象抽象2.封装封装3.继承继承4.多态性多态性上海海事大学信息工程学院青处于蓝,而胜于蓝青处于蓝,而胜于蓝v继承(继承(inheritance)机制是面向对象程序设计机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。继承呈现了面向对这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构。象程
26、序设计的层次结构。体现了由简单到复杂的体现了由简单到复杂的认识过程认识过程。v多态性(多态性(polymorphism)多态性是考虑在不多态性是考虑在不同层次的类中,以及在同一类中,同名的成员函同层次的类中,以及在同一类中,同名的成员函数之间的关系问题。函数的重载,运算符的重载,数之间的关系问题。函数的重载,运算符的重载,属于编译时的多态性。以虚函数为基础的运行时属于编译时的多态性。以虚函数为基础的运行时的多态性是面向对象程序设计的标志性特征。的多态性是面向对象程序设计的标志性特征。 体现了类推和比喻的思想方法。体现了类推和比喻的思想方法。上海海事大学信息工程学院派生类的声明方式派生类的声明方
27、式v 定义格式定义格式*v class 派生类名:访问限定符派生类名:访问限定符 基类名基类名1,访问限定符,访问限定符 v 基类名基类名2,访问限定符,访问限定符 基类名基类名nv private: v成员表成员表1; /派生类增加或替代的私有成员派生类增加或替代的私有成员v public:v成员表成员表2; /派生类增加或替代的公有成员派生类增加或替代的公有成员v protected:v成员表成员表3; /派生类增加或替代的保护成员派生类增加或替代的保护成员v ;/分号不可少分号不可少上海海事大学信息工程学院继承过程继承过程编制编制派生派生类时类时可分可分四步四步 吸收基类的成员吸收基类的
28、成员 改造基类成员改造基类成员 发展新成员发展新成员 重写构造函数与析构函数重写构造函数与析构函数 不论是数据成员,还是函数成员,不论是数据成员,还是函数成员,除构造函数与析构函数外全盘接收除构造函数与析构函数外全盘接收 声明一个和某基类成员同名的新成员声明一个和某基类成员同名的新成员,派派生类中的新成员就屏蔽了基类同名成员生类中的新成员就屏蔽了基类同名成员称为同名覆盖(称为同名覆盖(override) 派生类新成员必须与基类成员不同名,它派生类新成员必须与基类成员不同名,它的加入保证派生类在功能上有所发展。的加入保证派生类在功能上有所发展。 上海海事大学信息工程学院派生类的构成派生类的构成*
29、上海海事大学信息工程学院继承分类继承分类基类基类1基类基类2基类基类n派生类派生类1派生类派生类2基类基类派生类派生类1派生类派生类2(a)多重继承)多重继承 (b)单继承)单继承 一个基类一个基类可以直接可以直接派生出多派生出多个派生类个派生类 派生类可派生类可以由多个以由多个基类共同基类共同派生出来,派生出来,称多重继称多重继承。承。上海海事大学信息工程学院派生类成员的访问属性派生类成员的访问属性*上海海事大学信息工程学院v多级派生时的访问属性多级派生时的访问属性P164 例例5.4上海海事大学信息工程学院继承例题继承例题1在公有继承的情况下,基类成员在派生类中的访问权限在公有继承的情况下
30、,基类成员在派生类中的访问权限 。A受限制受限制 B. 保持不变保持不变 C. 受保护受保护 D. 不受保护不受保护9.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是( A ) A.派生类的对象可以赋给基类的对象派生类的对象可以赋给基类的对象 B.派生类的对象可以初始化基类的引用 C.派生类的对象可以直接访问基类中的成员 D.派生类的对象的地址可以赋给指向基类的指针上海海事大学信息工程学院派生类的构造函数和析构函数派生类的构造函数和析构函数*执行派生类构造函数的顺序是:调用基类构造函数,初始化基类数据成员调用子对象构造函数,初始化子对象数据成员执行派生类构造函数,初始化派生类
31、数据成员执行派生类析构函数的顺序是:调用派生类析构函数,清理派生类增加数据成员调用子对象析构函数,清理子对象数据成员调用基类析造函数,清理基类数据成员上海海事大学信息工程学院构造函数和析构函数次序例题构造函数和析构函数次序例题#include using namecpace std;class B1/基类基类B1声明声明 public:B1(int i) coutconstructing B1 iendl;B1() coutdestructing B1 endl;class B2/基类基类B2声明声明public:B2(int j) coutconstructing B2 jendl;B2()
32、 coutdestructing B2 endl;class B3/基类基类B3声明声明public:B3()coutconstructing B3 *endl;B3() coutdestructing B3 endl;class C: public B2, public B1, public B3public:C(int a, int b, int c, int d): B1(a),memberB2(d),memberB1(c),B2(b)private:B1 memberB1;B2 memberB2;B3 memberB3;void main()C obj(1,2,3,4); 上海海事大学
33、信息工程学院constructing B2 2constructing B1 1constructing B3 *constructing B1 3constructing B2 4constructing B3 *destructing B3destructing B2destructing B1destructing B3destructing B1destructing B2上海海事大学信息工程学院派生类构造函数一般形式:派生类构造函数一般形式: 派生类名:派生类名 (总参数表): 基类名(实参表 ), 子对象名(参数表) 派生类新增成员的初始化语句; 上海海事大学信息工程学院v多层派生
34、时的构造函数多层派生时的构造函数 P172 例例5.7v派生类的析构函数派生类的析构函数 与构造函数一样,不能继承基类的。与构造函数一样,不能继承基类的。上海海事大学信息工程学院派生类例题派生类例题1.类类A与类与类B都有都有public数据成员数据成员f,类类C公有继承公有继承A和和B,类类C有有public数数据成员据成员f,类,类D保护继承保护继承C,d是类是类D的一个对象,从的一个对象,从d访问类访问类A的成员的成员f的的表达式是表达式是 。d.A:f 上海海事大学信息工程学院多重继承多重继承v定义:定义: class D: public A, private B, protected
35、 C 类类D新增加的成员新增加的成员 v多重继承派生类的构造函数多重继承派生类的构造函数 派生类构造函数名派生类构造函数名(总参数表总参数表):基类:基类1构造函数构造函数(参参数表数表),基类基类2构造函数构造函数(参数表参数表),基类基类3构造函数构造函数(参参数表数表) 派生类新增成员初始化语句派生类新增成员初始化语句 P176 例例5.8上海海事大学信息工程学院多重继承的二义性多重继承的二义性v 在多重继承时,基类与派生类之间,或基类之间出现同在多重继承时,基类与派生类之间,或基类之间出现同名成员时,将出现访问时的二义性(不确定性)名成员时,将出现访问时的二义性(不确定性)采采用同名隐
36、藏规则或虚函数(仅针对成员函数)来解决。用同名隐藏规则或虚函数(仅针对成员函数)来解决。v 当派生类从多个基类派生,而这些基类又从同一个基类当派生类从多个基类派生,而这些基类又从同一个基类派生,则在访问此共同基类中的成员时,将产生二义派生,则在访问此共同基类中的成员时,将产生二义性性采用虚基类来解决。采用虚基类来解决。int a;int a;int a;上海海事大学信息工程学院v虚基类虚基类* P185 例例5.9class A ;class B: virtual public A ;class C: virtual public A ;上海海事大学信息工程学院v基类与派生类转换基类与派生类转
37、换* 大材小用大材小用上海海事大学信息工程学院第第6章复习要点章复习要点一个接口,多种方法一个接口,多种方法多态性的概念多态性的概念上海海事大学信息工程学院v静态多态v在编译程序时系统就可以确定调用哪个函数,因在编译程序时系统就可以确定调用哪个函数,因此静态多态性又称编译时的多态性。此静态多态性又称编译时的多态性。静态多态性是通过函数重载实现的。v动态多态v在程序运行中才能确定操作所针对的对象。它又在程序运行中才能确定操作所针对的对象。它又称运行时的多态性。称运行时的多态性。动态多态性是通过基类与派生类转换+虚函数实现的。上海海事大学信息工程学院多态性例题多态性例题1.C+语言中的多态性分为语
38、言中的多态性分为 时多态性和运行时的多态性。时多态性和运行时的多态性。编译 上海海事大学信息工程学院虚函数虚函数*v虚函数是一个类的成员函数,定义格式如下:虚函数是一个类的成员函数,定义格式如下:vvirtual 返回类型返回类型 函数名(参数表);函数名(参数表);v关键字关键字virtual指明该成员函数为虚函数。指明该成员函数为虚函数。virtual仅用于类定义中,如虚函数在类外定义,仅用于类定义中,如虚函数在类外定义,不可加不可加virtual。v当某一个类的一个类成员函数被定义为虚函数,当某一个类的一个类成员函数被定义为虚函数,则由该类派生出来的所有派生类中,该函数始终则由该类派生出
39、来的所有派生类中,该函数始终保持虚函数的特征。保持虚函数的特征。上海海事大学信息工程学院v当在派生类中重新定义虚函数(当在派生类中重新定义虚函数(overriding a virtual function,亦译作超载或覆盖)时,不亦译作超载或覆盖)时,不必加关键字必加关键字virtual。但重新定义时不仅要同名,。但重新定义时不仅要同名,而且它的参数表和返回类型全部与基类中的虚函而且它的参数表和返回类型全部与基类中的虚函数一样,否则联编时出错。数一样,否则联编时出错。v虚函数与改造类成员,同名覆盖(虚函数与改造类成员,同名覆盖(override)有关:如未加关键字有关:如未加关键字virtua
40、l,则是普通的派生,则是普通的派生类中的新成员函数覆盖基类同名成员函数(当然类中的新成员函数覆盖基类同名成员函数(当然参数表必须一样,否则是重载),可称为参数表必须一样,否则是重载),可称为同名覆同名覆盖函数盖函数,它,它不能实现运行时的多态性不能实现运行时的多态性。上海海事大学信息工程学院v比较有虚函数的比较有虚函数的override和无虚函数的和无虚函数的override,访问成员,访问成员上海海事大学信息工程学院#include class B0public: void display() cout B0:display() endl; ;class B1 : public B0publ
41、ic: void display() cout B1:display() endl; ;class D1 : public B1public: void display() cout D1:display() display (); void main() B0 b0; B1 b1; D1 d1; B0 *p; p = &b0; fun(p); p = &b1; fun(p); p = &d1; fun(p); B0:display()B0:display()B0:display() 上海海事大学信息工程学院#include class B0public: virtual void display() cout B0:display() endl; ;class B1 : public B0public: void display() cout B1:display() endl; ;clas
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (2025年)自考国家税收考题及答案
- (2025年)电力安规考试试题附答案
- 2026年国家开放大学《机械制图》机考题通关试题库及参考答案详解【黄金题型】
- 2025年物业保安考试题及答案
- 2026年美容化妆人员考前冲刺练习题【达标题】附答案详解
- 2026年卫生检疫检验技术练习题库(夺冠系列)附答案详解
- 2026年初级银行从业资格之初级个人理财预测试题含答案详解(培优B卷)
- 2026年医学伦理学期末通关模拟卷含完整答案详解(典优)
- 2026年生态环境法律法规知识竞赛模拟题库及完整答案详解【典优】
- 2025年美术中学教资题库及答案
- 储能电站设备智能运维与数据驱动技术方案
- 福建省福州市2026年中考适应性考试化学试题(含答案解析)
- 2026春统编版(新教材)小学道德与法治二年级下册(全册)各单元知识点复习课件
- 行政职业能力测试2026题库
- 按劳分配为主体、多种分配方式并存课件-2025-2026学年统编版道德与法治八年级下册
- 街道行政执法监督制度
- 遗传的物质基础课件文库
- 【量子位智库】2025年度具身智能创业投融资全景报告
- 城市内涝风险评估方案
- 江西省国有资本运营控股集团有限公司2026年第一批批次公开招聘参考考试试题附答案解析
- 2025春季日照银行校园招聘考察人员笔试历年典型考题及考点剖析附带答案详解
评论
0/150
提交评论