10 继承、多态和虚函数
第 10 章 继承、多态和虚函数 10.1 继承 继承是OOP程序设计中很重要的一个方面。继承易于扩充现有类以满足新的应用。将已有的类称之为父类,也称基类,将新产生的类称为子类,也称为导出类或派生类。 派生类不做任何改变地继承了基类中的所有变量和函数(构造函数和析构函数除外),并且还可以增加新的数据成员和函数,从而使导出类比基类更为特殊化。 Example: 例 10-1. 10.2 保护成员和类的访问 基类中的保护成员和私有成员比较类似,唯一的区别是:子类不可访问基类中的私有成员,但可访问基类中的保护成员。 在公有继承或保护继承的情况下,子类能访问基类的protected成员。 Example: 例 10-2 注意 如果省略了继承修饰符,那么就是私有继承: class Test : Grade 不要将继承修饰符与成员的访问修饰符相混淆:成员访问修饰符是规定类外语句能否访问类中的成员,而继承修饰符是为了限定基类成员在子类中的表现。 10.3 构造函数和析构函数 当基类和子类都有构造函数时,如果定义一个子类对象,那么首先要调用基类的构造函数,然后再调用子类的构造函数; 析构函数的调用次序与此相反,即先调用子类的析构函数,然后再调用基类的析构函数。 Example: 例 10-3. 10.3.2 向基类的构造函数传参数 如果基类和子类都有缺省的构造函数,它们的调用是自动完成的,这是一种隐式调用。 如果基类的构造函数带有参数,那么必须让子类的构造函数显式调用基类的构造函数,并且向基类构造函数传递适当的参数。 Example: 例 10-4 Note 如果基类没有缺省的构造函数,那么子类必须至少具有一个带参的构造函数,以便向基类构造函数传递参数。 10.3.3 初始化列表的作用 1. 如果类之间具有继承关系,子类必须在其初始化列表中调用基类的构造函数。例: 10.3.3 初始化列表的作用 2. 类中的const常量只能在初始化列表中进行初始化,而不能在函数体内用赋值的方式来初始化。 10.3.3 初始化列表的作用 3. 对象类型的成员的初始化放在初始化列表中,则效率较高,反之较低;基本类型变量的初始化可以在初始化列表中,也可在构造函数中,效率上没区别。 10.4 覆盖基类的函数成员 重载的特点: (1) 重载表现为有多个函数,它们的名字相同,但参数 不全相同; (2) 重载可以出现在同一个类中,也可出现在具有继承关系的父类与子类中; (3) 重载也可表现为外部函数的形式。 10.4 覆盖基类的函数成员 覆盖的特点: (1) 覆盖一定出现在具有继承关系的基类和子类之间; (2) 覆盖除了要求函数名完全相同,还要求相应的参数个数和类型也完全相同 ; (3) 当进行函数调用时,子类对象所调用的是子类中定义的函数; (4) 覆盖是C++多态性的部分体现。 10.5 虚函数 函数覆盖体现了一定的多态性。但是,简单的函数覆盖并不能称为真正的多态性。 Example: 例 10-7 虚析构函数 C++中构造函数不能声明为虚函数。 在构造函数中调用虚函数不能实现动态绑定。 例子: 3_1构造函数中调用虚函数 当释放动态对象时,只调用指针的类型对应类的析构函数,与指向对象无关,当用派生类的动态对象给基类指针赋值时,只调用基类的析构函数,而不调用派生类的析构函数,那么派生类新增成员占用的内存就无法释放。 例子: 3_2虚析构函数 当程序中用派生类的动态对象给基类指针赋值时,必须定义虚析构函数,确保调用适当的析构函数完全释放动态分配的内存,当基类中定义了虚析构函数后,派生类的析构函数自动成为虚析构函数。 类之间的关系 对象成员:Object members) 友元类和友元成员:Friend classes and friend member functions; 基类与派生类:Base and derived classes; 类的嵌套:Class nesting 10.6 纯虚函数和抽象类 纯虚函数是在基类中声明的虚函数,没有函数体,要求继承基类的子类必须覆盖它(当该子类继续向下派生新的类时,此类可以不重新定义纯虚函数,该类仍然是抽象类)。 带有纯虚函数的类称为抽象类,不能定义抽象类的对象。 派生类可以根据自己的需要,分别覆盖它,从而实现真正意义上的多态性。 格式: virtual void showInfo( ) = 0; 纯虚函数与抽象类 例子: 4抽象类 在某些情况下,基类只用于作为其它派生类的框架( framework ),这个类不需要定义任何对象,所以它的某些函数也不可能给出任何有实际意义的代码,此时要把这些函数声明为
您可能关注的文档
最近下载
- 制造业信息化战略规划实施与优化-PDM.docx VIP
- 那智不二越机器人flexgui toolbox操作说明书.pdf VIP
- 智慧工厂-智慧工厂解决方案.docx VIP
- 高中化学解题方法归纳:和量法.doc VIP
- 译林牛津新版高中英语(必修1-3)单词表.pdf VIP
- 包装有限公司分切机安全风险分级清单.docx VIP
- 重庆市西南大学附属中学2025届高三下学期二诊模拟考试物理试卷 含解析.docx VIP
- 【高中英语】《星火英语同步词汇》抗遗忘速记手册.docx VIP
- 成都市锦江区2026届初三一诊(暨期末考试)数学试卷(含答案).docx
- 三坐标 培训教程.pptx VIP
原创力文档

文档评论(0)