多态性与虚函数习题
### 多态性与虚函数知识点详解 #### 一、多态性概念 **多态性**是面向对象编程中的一个重要特性,它允许子类对象替换父类对象,从而达到程序设计的高度灵活性。C++中多态性的实现主要依赖于虚函数机制。 #### 二、虚函数与多态性 在C++中,通过定义虚函数来实现多态性。虚函数允许在基类中声明,并在派生类中重新定义,这样就可以根据实际的对象类型调用不同的实现。 ##### **1. 运行时多态性** - **定义**: 运行时多态性是指在程序运行期间,根据对象的实际类型来决定调用哪个函数的特性。 - **实现方式**: 使用虚函数。 - **关键**: 通过指向基类的指针或引用调用虚函数,编译器会根据对象的动态类型来决定调用哪个版本的函数。 ##### **2. 纯虚函数与抽象类** - **纯虚函数**: 没有具体实现的虚函数,通常用于强制派生类提供自己的实现。 - **抽象类**: 包含至少一个纯虚函数的类被称为抽象类。 - **用途**: 抽象类主要用于作为其他类的基类,不能直接创建抽象类的对象。 - **示例代码**: 如习题中的第2题提到的抽象类定义。 #### 三、选择题解析 1. **答案**: D - **解释**: 运行时多态性主要是通过虚函数实现的,内联函数、重载函数和模板函数都不能实现这一特性。 2. **答案**: (a)抽象类 - **解释**: 如果一个类至少包含一个纯虚函数,则该类被视为抽象类。 3. **答案**: (c) int - **解释**: 在重载后缀运算符时,通常会添加一个`int`类型的参数来区分一元运算符的前后缀形式。 4. **答案**: (c)抽象类的派生类可以实例化 - **解释**: 抽象类确实不能实例化,但是它的派生类如果提供了所有纯虚函数的具体实现,则是可以实例化的。 5. **答案**: Basederivedbasederived - **解释**: 这个例子展示了如何通过指向派生类对象的基类引用调用虚函数。`f(obj)`中的`obj`是`derived`类型,但由于`fun1`不是虚函数,所以输出`base`;`fun2`是虚函数,所以输出`derived`。 6. **答案**: A.virtual可以用来声明虚函数 - **解释**: `virtual`关键字用于声明虚函数,其他选项描述不准确或错误。 7. **答案**: D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 - **解释**: 虚函数的重新定义需要保持与基类中虚函数相同的参数个数和类型。 8. **答案**: A.对象指针 - **解释**: 动态联编通常是通过对象指针或引用实现的,这里指针是最常见的用法。 9. **答案**: C.virtualvoidvf()=0; - **解释**: 纯虚函数的定义中包含`= 0`,并且需要使用`virtual`关键字。 10. **答案**: D.动态联编是在编译时确定操作函数的 - **解释**: 动态联编是在运行时确定调用哪个函数的版本,而不是在编译时。 #### 四、填空题解析 1. **答案**: 编译时多态性和运行时多态性。 - **解释**: C++中的多态性包括编译时多态性和运行时多态性两种形式。 2. **答案**: 静态绑定,通过重载函数和默认参数实现。 - **解释**: 编译时确定的函数调用通过重载函数和默认参数实现静态绑定。 3. **答案**: 动态绑定,通过虚函数机制实现。 - **解释**: 运行时确定的函数调用通过虚函数机制实现动态绑定。 4. **答案**: virtual; 名称相同; 参数列表相同; 返回类型相同(如果有的话); 虚函数; 继承 - **解释**: 虚函数的声明与继承规则,以及派生类如何继承基类中的虚函数。 5. **答案**: 对象指针; 引用; 运行; 基类指针; 运行时 - **解释**: 通过对象指针或引用调用虚函数实现运行时多态性,而通过基类指针则无法实现这种多态性。 6. **答案**: 函数体; 派生类; 构造函数; 抽象; 创建对象; 抽象 - **解释**: 纯虚函数的相关概念及其在抽象类中的作用。 7. **答案**: 不可以; 可以; 析构; 虚 - **解释**: 析构函数可以是虚函数,而构造函数不能是虚函数。析构函数通常用于释放动态分配的资源。 8. **答案**: virtual - **解释**: 为了使`Base`类中的`fun`成为虚函数,需要在声明前加上`virtual`关键字。 #### 总结 多态性是C++中一项非常强大的特性,它使得代码更加灵活和可扩展。通过虚函数机制,程序员可以在运行时基于对象的实际类型来调用相应的函数实现,这极大地提高了程序的设计灵活性和可维护性。理解并熟练掌握虚函数和多态性的使用对于编写高质量的C++程序至关重要。
- Dyn_18122016-02-19习题内容格式很好,知识点比较完整,推荐各位下载一看。
- 粉丝: 1
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助