2015年大一下第12周项目0-阅读程序
2015-05-28 15:56
253 查看
(1)请写出程序的执行结果,并在上机时对照理解
运行结果:
请回答:当基类的指针指向派生类时,用指针调用同名成员函数,执行的是基类的成员函数,还是派生类的成员函数?为什么会这样?
回答:执行的是基类的成员函数,当基类的指针指向派生类的时候,指针只能访问派生类继承于基类的成员函数。
(2)如果将Vehicle类的定义修改为虚函数,其余不变,请写出程序的执行结果
运行结果:
请回答:当基类的指针指向派生类时,用指针调用同名虚成员函数,执行的是基类的成员函数,还是派生类的成员函数?为什么会这样?什么是多态性?请结合本例的运行结果说明。
回答:执行的是派生类的成员函数,因为当基类的指针指向派生类的时候,基类的虚函数会在派生类中重新定义,从而执行派生类的函数。在本例中多态性指的是用一个基类的指针去访问各个派生类中的成员函数,达到一个接口多个结果的目的。
(3)如果将Vehicle类的定义修改为纯虚函数,找出main()函数中将使编译出错的行删除(或改为注释),请写出程序的执行结果,并在上机时对照理解
运行结果:
请回答:当基类同名成员函数定义为纯虚函数后,发生了什么现象?为什么会这样?
回答:会出现错误。当基类同名成员函数定义为纯虚函数后,基类成为抽象基类,不能创建对象。
#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; }
运行结果:
请回答:当基类同名成员函数定义为纯虚函数后,发生了什么现象?为什么会这样?
回答:会出现错误。当基类同名成员函数定义为纯虚函数后,基类成为抽象基类,不能创建对象。
相关文章推荐
- 2015年大一下第1周项目1-阅读程序(1)
- 2015年大一下第1周项目1-阅读程序(2)
- 第12周项目1-阅读程序(1)
- 第12周项目1(3)-阅读有递归函数的程序并输出结果
- 第12周 项目1-阅读程序(3)
- 2015年大一下第13周项目4-处理C++源代码的程序(1)main()函数
- 第12周项目1-阅读程序(2)全局变量(二)
- 第12周项目1 阅读程序(2)整型变量
- 第12周项目 程序阅读(3)
- 第12周 项目1-阅读程序(4)
- 第12周上机实践项目1——阅读程序(递归函数)
- 2015年大一下第11周项目0-多重继承(程序填空)
- 第12周项目一 程序阅读题(4)
- 第12周项目1阅读程序写出运行结果1
- 第12周项目 程序阅读(4)
- 2015年大一下第2周项目3-程序的多文件组织
- 第12周项目1-阅读程序(3)
- 第12周项目 1.1 阅读程序
- 第12周项目 程序阅读(5.d)
- 第12周项目1 --默认参数(阅读程序)