第十三周阅读程序4:继承与指针
来源:互联网 发布:怎么用dw装修淘宝店铺 编辑:程序博客网 时间:2024/06/10 23:21
问题及代码:
#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; //对car对象取地址 vp->run(); vp=&airplane; //对airplan对象取地址 vp->run(); return 0;}
请回答:当基类的指针指向派生类时,用指针调用同名成员函数,执行的是基类的成员函数,还是派生类的成员函数?为什么会这样?
在继承关系中直接用对象访问不同类的同名成员函数是可以的。
但是用指向基类的指针访问的时候,基类指针是无法访问派生类中非继承的成员函数和数据成员的。所以输出的结果仍然是继承而来的基类的成员函数,输出
run a vehicle.
run a vehicle.
(2)如果将Vehicle类的定义修改为虚函数,其余不变,请写出程序的执行结果
请回答:当基类的指针指向派生类时,用指针调用同名虚成员函数,执行的是基类的成员函数,还是派生类的成员函数?为什么会这样?什么是多态性?请结合本例的运行结果说明
将基类同名函数设置为虚函数,则在派生类中的同名函数就会相当于覆盖掉了基类中的虚函数,所以指向基类的指针可以理所当然的可以指向派生类的成员函数,输出
run a car.
run a aieplane.
这正是体现了动态多态性。
(3)如果将Vehicle类的定义修改为纯虚函数,找出main()函数中将使编译出错的行删除(或改为注释),请写出程序的执行结果,并在上机时对照理解
virtual void run() const = 0; //(3) run()为纯虚函数,const意指其为常成员函数,并非纯虚函数之必要
请回答:当基类同名成员函数定义为纯虚函数后,发生了什么现象?为什么会这样?
含有纯虚函数的类,变成了虚基类,而在虚基类是不能定义对象的。
0 0
- 第十三周阅读程序4:继承与指针
- 第十三周阅读程序4
- 第十三周 程序阅读
- 第十三周 阅读程序
- 第十三周程序阅读
- 第十三周-阅读程序
- 第十三周-阅读程序
- 第十三周-阅读程序
- 第十三周--阅读程序
- 第十三周阅读程序
- 第十三周阅读程序一
- 第十三周阅读程序二
- 第十三周阅读程序三
- 第十三周阅读程序四
- 第十三周 程序阅读一
- 第十三周阅读程序1
- 第十三周阅读程序2
- 第十三周 程序阅读二
- UIImage在拍照上传到服务器时,图片发生旋转解决方案
- JQuery 将一个text文本框动态改变为一个文本编辑器
- Android Studio中解决Gradle DSL method not found: 'android()'
- HDU 2141 Can you find it?(二分)
- 如何自定义一个优雅的ContentProvider
- 第十三周阅读程序4:继承与指针
- 在Grunt task中集成Protractor
- 黑马程序员_java语言_集合框架(Collection)
- Atom编辑器折腾记_(11)编辑器实时预览HTML页面(插件:Atom HTML Preview)
- lucene4.6 索引创建和搜索例子
- INSERT ... ON DUPLICATE KEY UPDATE
- HDU ACM 2233 机器人的旅行
- 数字图像加噪