虚函数的参数是其所属对象本身怎么办

2018-11-23  本文已影响0人  路万奇与青川君

虚函数的参数是其所属对象本身怎么办?

问题简述:

请注意,这不是一个虚函数的知识点!!,只是为了方便和我在可能同情形下,遇到相同问题的同学检索该信息方便,我取了这样一个标题。

问题的起因是这样一道 C++ 的实验题。

6-2 车的不同行为 (10 分)
定义一个车(vehicle)基类,有虚函数Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,它们都有Run、Stop等成员函数。完成这些类使得主函数可以运行并得到正确的输出结果。

函数接口定义:
完成类代码

裁判测试程序样例:

/* 请在这里填写答案 */
int main(int argc, char const *argv[])
{
    Vehicle veh;
    Bicycle bic;
    Motorcar mot;
    run(veh);
    run(bic);
    run(mot);
    return 0;
}

输入样例:

输出样例:
在这里给出相应的输出。例如:

Vehicle run
Bicycle run
Motorcar run


问题解决

其实说起来这并不是一道非常难的题,但是有个地方让我非常头疼...

本来其实我写出来的程序,如果主函数里是 veh.run() 、mot.run() 我可能根本不会写这个文档,但是就是遇上了杨军老师出的这么古怪的一道题:

居然直接调用 run() 函数,传入的参数是某个含有 run() 成员函数的对象

绞尽脑汁...

最后是在逛 CSDN 的时候得到了一丝灵感,因为之前根本没有想到 #define 的骚气玩法...

下面贴上我的解决方法:

#include <iostream>
using namespace std;

#define run(obj) obj.Run()

class Vehicle{
  public:
      Vehicle(){
      
    }
    virtual void Run(){
        cout << "Vehicle run" << endl;    
    }
};

没错,正是用到了 #define 可以传入参数,来定义所谓的伪函数的用法。

-- THE END --

上一篇下一篇

猜你喜欢

热点阅读