您的位置:首页 > 其它

第十三周阅读项目 项目2

2016-06-06 20:06 141 查看
问题及代码:

阅读、修改和运行关于交通工具类的程序,回答问题,以理解相关技术方法

(1)请写出程序的执行结果,并在上机时对照理解

[cpp] view
plain copy

 print?

#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类的定义修改为虚函数,其余不变,请写出程序的执行结果

[cpp] view
plain copy

 print?

class Vehicle {  

public:   

    virtual void run() const { cout << "run a vehicle. "<<endl; } //(2) run()为虚函数  

};  

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

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

[cpp] view
plain copy

 print?

class Vehicle{  

public:   

    virtual void run() const = 0; //(3) run()为纯虚函数,const意指其为常成员函数,并非纯虚函数之必要  

};   

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

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

运行结果:

(1)



(2)



(3)



知识点总结:

虚函数

学习心得:

(1)执行的是基类的成员函数。(1)执行的基类的成员函数,(2)执行的是派生类的成员函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: