第十三周 课后实践:阅读程序2

来源:互联网 发布:程序员找男朋友 编辑:程序博客网 时间:2024/05/16 07:13

(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)问题及代码:

#include <iostream>using namespace std;class Vehicle  //交通工具{public:    virtual 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;}


 

运行结果:

 

回答:

当基类的指针指向派生类时,用指针调用同名虚成员函数,执行的是派生类的成员函数,因为run是一个虚函数,动态多态性。

 

(3)问题及代码:

#include <iostream>using namespace std;class Vehicle  //交通工具{public:    virtual void run() const=0;    //{ 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;}


 

运行结果:

 

回答:

当基类同名成员函数定义为纯虚函数后,vehicle类就变成了抽象类。

0 0
原创粉丝点击