当前位置: 首页 > article >正文

C++:虚函数与多态性习题

题目内容:

构建一个车(vehicle)基类,包含Run、Stop两个纯虚函数。由此基类,派生出(Car)轿车类,(truck)卡车类,在这两个类中别分定义Run和Stop两个函数,每个函数中输出 car 或者 truck  is   running 或 stopping。主函数中,分别实例化轿车类与卡车类,并构建基类指针,分别调用两个派生类对象的Run和Stop函数。

输出样例如下:

代码如下:

#include <iostream>
using namespace std;

class Vehicle
{
public:
    virtual void Run() = 0;
    virtual void Stop() = 0;
    virtual ~Vehicle() {}
};

class Car : public Vehicle
{
public:
    void Run()
    {
        std::cout << "Car is running." << std::endl;
    }

    void Stop()
    {
        std::cout << "Car is stopping." << std::endl;
    }
};

class Truck : public Vehicle
{
public:
    void Run()
    {
        std::cout << "Truck is running." << std::endl;
    }

    void Stop()
    {
        std::cout << "Truck is stopping." << std::endl;
    }
};

int main()
{
    Vehicle* vehicle1 = new Car();
    Vehicle* vehicle2 = new Truck();
    vehicle1->Run();
    vehicle1->Stop();
    vehicle2->Run();
    vehicle2->Stop();
    return 0;
}

这段 C++ 代码实现了一个简单的面向对象编程示例,通过抽象基类和派生类展示了多态性的概念。下面是这段代码的逐步解释:

1. 抽象基类Vehicle的定义

  • virtual void Run() = 0; 和 virtual void Stop() = 0;:这两个函数是纯虚函数,纯虚函数在基类中声明但没有实现,包含纯虚函数的类被称为抽象基类。抽象基类不能被实例化,其主要作用是为派生类提供统一的接口。
  • virtual ~Vehicle() {}:虚析构函数,确保在通过基类指针删除派生类对象时,能够正确调用派生类的析构函数,避免内存泄漏。

2. 派生类Car的定义

  • class Car : public VehicleCar 类继承自 Vehicle 类,使用 public 继承方式,意味着基类的 public 和 protected 成员在派生类中保持相同的访问权限。
  • void Run() 和 void Stop():实现了基类中定义的纯虚函数,提供了 Car 类的具体行为。

3. 派生类Truck的定义

  • 与 Car 类类似,Truck 类也继承自 Vehicle 类,并实现了基类的纯虚函数,提供了 Truck 类的具体行为。

4. 主函数

  • Vehicle* vehicle1 = new Car(); 和 Vehicle* vehicle2 = new Truck();:创建了两个基类指针 vehicle1 和 vehicle2,分别指向 Car 和 Truck 类的对象。这里体现了多态性,即基类指针可以指向派生类对象。
  • vehicle1->Run(); 和 vehicle1->Stop();:通过基类指针调用 Run() 和 Stop() 函数,由于这两个函数在基类中被声明为虚函数,实际调用的是派生类中实现的函数,输出相应的信息。
  • vehicle2->Run(); 和 vehicle2->Stop();:同理,通过基类指针调用 Truck 类的 Run() 和 Stop() 函数。

这段代码通过抽象基类和派生类展示了多态性的概念,使得程序可以通过基类指针调用派生类的具体实现。

觉得有帮助就给博主点个关注叭~~

有问题的可以私信或者在评论区一起交流

友友们一起加油叭QAQ


http://www.kler.cn/a/528817.html

相关文章:

  • Longformer:处理长文档的Transformer模型
  • 计算机毕业设计Python+CNN卷积神经网络考研院校推荐系统 考研分数线预测 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习
  • React第二十八章(css modules)
  • LabVIEW温度修正部件测试系统
  • AI DeepSeek-R1 Windos 10 环境搭建
  • RRT_STAR路径规划代码
  • [ACTF2020 新生赛]Exec 1
  • 记忆力训练day11
  • FFmpeg工具使用基础
  • 844.比较含退格的字符串
  • 【大坑】使用element-ui弹窗$confirm自动弹出
  • OpenAI:人工智能领域的先锋力量
  • 【数据采集】案例02:基于Selenium采集豆瓣电影Top250的详细数据
  • Heptagon record 数据结构
  • SAP物料分类账相关后台配置、准备工作
  • 【token】【1】零基础token pipline快速实战
  • AI生成产品原型与设计稿:我的工具使用心得与推荐
  • Vue.js `Suspense` 和异步组件加载
  • 当WebGIS遇到智慧文旅-以长沙市不绕路旅游攻略为例
  • linux 函数 sem_init () 信号量、sem_destroy()
  • 【react+redux】 react使用redux相关内容
  • langchain 实现多智能体多轮对话
  • 什么情况下,C#需要手动进行资源分配和释放?什么又是非托管资源?
  • 无心剑七绝《深度求索》
  • 数据密码解锁之DeepSeek 和其他 AI 大模型对比的神秘面纱
  • 解锁Linux共享内存:进程通信的极速引擎