第13周 《C++语言基础》程序阅读——多态性与抽象类 (4)
来源:互联网 发布:巨森网络 编辑:程序博客网 时间:2024/04/30 11:45
2、阅读、修改和运行关于交通工具类的程序,回答问题,以理解相关技术方法
(1)请写出程序的执行结果,并在上机时对照理解
#include <iostream>using namespace std;class Vehicle //交通工具{public: void run() const { cout << "run a vehicle. "<<endl; }};class Car: public Vehicle //汽车{public: void run() const { cout << "run a car. "<<endl; }};class Airplane: public Vehicle //飞机{public: void run() const { cout << "run a airplane. "<<endl; }};int main(){ cout<<"(a) 直接用对象访问成员函数: "<<endl; Vehicle v; v.run(); Car car; Airplane airplane; car.run(); airplane.run(); cout<<"(b)用指向基类的指针访问成员函数: "<<endl; Vehicle *vp; vp=&car; vp->run(); vp=&airplane; vp->run(); return 0;}
预计运行结果:
(a) 直接用对象访问成员函数:
run a vehicle.
run a car.
run a airplane.
(b)用指向基类的指针访问成员函数:
run a vehicle.
run a vehicle.
实际运行结果:
请回答:当基类的指针指向派生类时,用指针调用同名成员函数,执行的是基类的成员函数,还是派生类的成员函数?为什么会这样?
执行的是基类的成员函数,以为函数名重载但是被覆盖了。
(2)如果将Vehicle类的定义修改为虚函数,其余不变,请写出程序的执行结果
class Vehicle {public: virtual void run() const { cout << "run a vehicle. "<<endl; } //(2) run()为虚函数};
预计运行结果:
(a) 直接用对象访问成员函数:
run a vehicle.
run a car.
run a airplane.
(b)用指向基类的指针访问成员函数:
run a car.
run a airplane.
实际运行结果:
请回答:当基类的指针指向派生类时,用指针调用同名虚成员函数,执行的是基类的成员函数,还是派生类的成员函数?为什么会这样?什么是多态性?请结合本例的运行结果说明。
因为c++的机制用virtual函数可以实现多义性。
(3)如果将Vehicle类的定义修改为纯虚函数,找出main()函数中将使编译出错的行删除(或改为注释),请写出程序的执行结果,并在上机时对照理解
class Vehicle{public: virtual void run() const = 0; //(3) run()为纯虚函数,const意指其为常成员函数,并非纯虚函数之必要};
因为含有纯虚函数所以为抽象类不能创建对象。
1 0
- 第13周 《C++语言基础》程序阅读——多态性与抽象类 (4)
- 第13周 《C++语言基础》程序阅读——多态性与抽象类 (1)
- 第13周 《C++语言基础》程序阅读——多态性与抽象类 (2)
- 第13周 《C++语言基础》程序阅读——多态性与抽象类 (3)
- 《C++语言基础》程序阅读——多态性与抽象类
- 第12周-程序阅读-多态性与抽象类-虚函数
- 第12周-程序阅读-多态性与抽象类-虚析构函数
- 第12周-程序阅读-多态性与抽象类-纯虚函数
- 第13周多态性与虚函数程序阅读
- 《C++语言基础》实践项目——多态性与抽象类
- 第12周 《C++语言基础》程序阅读——多重继承(4)
- 第14周 《C语言及程序设计》程序阅读——数组与指针
- 第12周 《C++语言基础》程序阅读——多重继承(1)
- 第12周 《C++语言基础》程序阅读——多重继承(2)
- 第12周 《C++语言基础》程序阅读——多重继承(3)
- 第12周 《C++语言基础》程序阅读——多重继承(5)
- 第16周《C++语言基础》程序阅读——异常处理和命名空间
- 第14周 《C++语言基础》程序阅读——标准输入输出对象及文本文件 (3)(1)
- CSS解决图片下面有空隙的简单方法
- linux 技巧:使用 screen 管理你的远程会话
- 面向对象的三大支柱:继承,封装,多态
- (157A)
- PHP 下载功能源码
- 第13周 《C++语言基础》程序阅读——多态性与抽象类 (4)
- 第十三周阅读项目(1):虚函数
- 葛教你如何成为顶尖互联网产品经理
- 指环王经典,励志篇
- InnoDB的三个关键特性
- Codeforces Round #305 (Div. 2)-Mike and Fun(暴力求解连续1)
- 《C Primer Plus(第5版)中文版》第6章编程练习第14题
- poj 3177 边双连通分量(处理重边)
- Java--comparator接口与Comparable接口的区别