水满秋池 2022-05-16 11:26 采纳率: 100%
浏览 46
已结题

关于一个多态性编程测试

定义描述交通工具的抽象类Vehicle,其中包含纯虚函数introduce用于介绍工具的概况。
由Vehicle类派生出两种交通工具——飞机类Plane和火车类Train,再定义普通函数void info(Vehilce * veh),该函数能根据传递的对象正确调用属于所传对象的introduce函数。主函数中,输入字符串飞机或火车,在堆空间上生成相应的对象,传递该对象给info函数,信息显示结束后释放堆空间。

  • 写回答

1条回答 默认 最新

  • 丨秋水丨 2022-05-16 12:16
    关注
    
    #include<iostream>
    #include<string>
    using namespace std;
    class Vehicle
    {
    public:
        virtual void introduce() const = 0;
    };
    
    class Plane : public Vehicle
    {
    public:
        virtual void introduce() const override
        {
            cout << "一架飞机" << endl;
        }
    };
    
    class Train : public Vehicle
    {
    public:
        virtual void introduce() const override
        {
            cout << "一列火车" << endl;
        }
    };
    
    void info(Vehicle* veh)
    {
        veh->introduce();
    }
    
    int main()
    {
        string input;
        while (cin >> input)
        {
            Vehicle* v = nullptr;
            if (input == "飞机")
            {
                v = new Plane();
            }
            else if (input == "火车")
            {
                v = new Train();
            }
            if (v)
            {
                info(v);
                delete v;
            }
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月16日
  • 已采纳回答 5月16日
  • 创建了问题 5月16日

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 添加组件无法加载页面,某块加载卡住
  • ¥15 网络科学导论,网络控制
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错