2015年大一下第12周项目0-阅读程序
来源:互联网 发布:excel随机数据生成 编辑:程序博客网 时间:2024/06/05 04:54
(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;}
运行结果:
请回答:当基类的指针指向派生类时,用指针调用同名成员函数,执行的是基类的成员函数,还是派生类的成员函数?为什么会这样?
回答:执行的是基类的成员函数,当基类的指针指向派生类的时候,指针只能访问派生类继承于基类的成员函数。
(2)如果将Vehicle类的定义修改为虚函数,其余不变,请写出程序的执行结果
class Vehicle {public: virtual void run() const { cout << "run a vehicle. "<<endl; } //(2) run()为虚函数};
运行结果:
请回答:当基类的指针指向派生类时,用指针调用同名虚成员函数,执行的是基类的成员函数,还是派生类的成员函数?为什么会这样?什么是多态性?请结合本例的运行结果说明。
回答:执行的是派生类的成员函数,因为当基类的指针指向派生类的时候,基类的虚函数会在派生类中重新定义,从而执行派生类的函数。在本例中多态性指的是用一个基类的指针去访问各个派生类中的成员函数,达到一个接口多个结果的目的。
(3)如果将Vehicle类的定义修改为纯虚函数,找出main()函数中将使编译出错的行删除(或改为注释),请写出程序的执行结果,并在上机时对照理解
#include <iostream>using namespace std;class Vehicle {public: virtual void run() const =0; //(2) run()为虚函数};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;}
运行结果:
请回答:当基类同名成员函数定义为纯虚函数后,发生了什么现象?为什么会这样?
回答:会出现错误。当基类同名成员函数定义为纯虚函数后,基类成为抽象基类,不能创建对象。
0 0
- 2015年大一下第12周项目0-阅读程序
- 2015年大一下第1周项目1-阅读程序(1)
- 2015年大一下第1周项目1-阅读程序(2)
- 2015年大一下第11周项目0-多重继承(程序填空)
- 2015年大一下第8周项目0-是春哥啊
- 2015年大一下第2周项目3-程序的多文件组织
- 2015年大一下第4周项目3-用多文件组织多个类的程序
- 2015年大一下第1周项目2-旱冰场造价
- 2015年大一下第1周项目3-长方体类
- 2015年大一下第1周项目4-时间类
- 2015年大一下第5周项目5-友元类
- 2015年大一下第14周项目2-二进制文件浏览器
- 2015年大一下第12周项目1-动物这样叫
- 2015年大一下第12周项目2-形状类族的中的纯虚函数
- 2015年大一下第12周项目3--立体类族共有的抽象类
- 2015年大一下第12周项目4-链表类(1)
- 2015年大一下第12周项目4-链表类(2)约瑟夫环
- 2015年大一下第13周项目4-处理C++源代码的程序(1)main()函数
- 递归求数组和
- 机房收费系统之如何注册控件
- HD4185Oil Skimming
- DM3730 x-loader 分析 二
- 反射中的方法
- 2015年大一下第12周项目0-阅读程序
- 组件中双向映射
- apache的源码安装详细过程全纪录
- jdbc连接字符集为us7ascii的oracle数据库乱码解决办法
- xx
- Ubuntu 12.04下PostgreSQL-9.1安装与配置详解(在线安装)
- androidのlistview详细使用及问题解决
- 3Sum
- SAX方式解析XML文档