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