第十三周阅读项目 项目2

问题及代码:

 

阅读、修改和运行关于交通工具类的程序,回答问题,以理解相关技术方法
(1)请写出程序的执行结果,并在上机时对照理解

[cpp] view plain copy  print?

  1. #include   
  2. using namespace std;  
  3. class Vehicle  //交通工具  
  4. {  
  5. public:  
  6.     void run() const  
  7.     { cout << "run a vehicle. "<
  8. };  
  9. class Car: public Vehicle  //汽车  
  10. {  
  11. public:  
  12.     void run() const  
  13.     { cout << "run a car. "<
  14. };  
  15. class Airplane: public Vehicle  //飞机  
  16. {  
  17. public:  
  18.     void run() const  
  19.     { cout << "run a airplane. "<
  20. };  
  21. int main()  
  22. {  
  23.     cout<<"(a) 直接用对象访问成员函数: "<
  24.     Vehicle v;  
  25.     v.run();  
  26.     Car car;  
  27.     Airplane airplane;  
  28.     car.run();  
  29.     airplane.run();  
  30.     cout<<"(b)用指向基类的指针访问成员函数: "<
  31.     Vehicle *vp;  
  32.     vp=&car;  
  33.     vp->run();  
  34.     vp=&airplane;  
  35.     vp->run();  
  36.     return 0;  
  37. }  

请回答:当基类的指针指向派生类时,用指针调用同名成员函数,执行的是基类的成员函数,还是派生类的成员函数?为什么会这样?

(2)如果将Vehicle类的定义修改为虚函数,其余不变,请写出程序的执行结果

[cpp] view plain copy  print?

  1. class Vehicle {  
  2. public:   
  3.     virtual void run() const { cout << "run a vehicle. "<//(2) run()为虚函数  
  4. };  

请回答:当基类的指针指向派生类时,用指针调用同名虚成员函数,执行的是基类的成员函数,还是派生类的成员函数?为什么会这样?什么是多态性?请结合本例的运行结果说明。

(3)如果将Vehicle类的定义修改为纯虚函数,找出main()函数中将使编译出错的行删除(或改为注释),请写出程序的执行结果,并在上机时对照理解

[cpp] view plain copy  print?

  1. class Vehicle{  
  2. public:   
  3.     virtual void run() const = 0; //(3) run()为纯虚函数,const意指其为常成员函数,并非纯虚函数之必要  
  4. };   

请回答:当基类同名成员函数定义为纯虚函数后,发生了什么现象?为什么会这样?

(4)提交博文,记录实验过程和结果,用自己的话回答上面提出的问题,概括你对虚函数、多态性和抽象类的理解。——不要忽视回答问题,写出来,你会更明白。

 

 

 

运行结果:

(1)

第十三周阅读项目 项目2_第1张图片

(2)

第十三周阅读项目 项目2_第2张图片

(3)

第十三周阅读项目 项目2_第3张图片

知识点总结:

虚函数

学习心得:

(1)执行的是基类的成员函数。(1)执行的基类的成员函数,(2)执行的是派生类的成员函数。

你可能感兴趣的:(学校作业)