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

embedded/2025/2/6 10:16:43/

题目内容:

构建一个车(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.ppmy.cn/embedded/159994.html

相关文章

【字节青训营-9】:初探字节微服务框架 Hertz 基础使用及进阶(下)

本文目录 一、Hertz中间件Recovery二、Hertz中间件跨资源共享三、Hertz 响应四、Hertz请求五、Hertz中间件Session 一、Hertz中间件Recovery Recovery中间件是Hertz框架预置的中间件&#xff0c;使用server.Default()可以默认注册该中间件&#xff0c;为Hertz框架提供panic回复…

C语言:结构体

一&#xff0c;结构体 C语⾔已经提供了内置类型&#xff0c;如&#xff1a;char、short、int、long、float、double等&#xff0c;但是只有这些内置类型还是不够的&#xff0c;假设我想描述学⽣&#xff0c;描述⼀本书&#xff0c;这时单⼀的内置类型是不⾏的。 描述⼀个学⽣需…

无人机动力套(电机、电调)技术详解

无人机动力套技术主要涉及电机和电调两大核心组件&#xff0c;它们在无人机的飞行性能中起着至关重要的作用。以下是对无人机动力套技术的详细解析&#xff1a; 一、电机技术详解 1. 电机的作用&#xff1a; 电机是将电能转化为机械能的关键部件&#xff0c;其主要作用是产生…

手写MVVM框架-实现v-model(双向绑定)

上一章我们实现了&#xff0c;修改input的值后文本节点的内容发生了变化&#xff0c;还有一个v-model属于双向绑定&#xff0c;我们我们的值发生了变化的话&#xff0c;input的值也需要发生变化&#xff0c;这一章&#xff0c;我们来实现这个功能。 第一步&#xff1a;收集属性…

在x86上使用debootstrap构建龙芯环境失败的尝试

本文主要介绍在x86平台上使用debootstrap来构建龙芯平台的编译和运行环境。 本文中没有非常明显的逻辑关系&#xff0c;由于实践的时间跨度较长&#xff0c;记录的可能不完整&#xff0c;但可以作为实践过程的一侧面印证。如有相关需求&#xff0c;建议参考上一文章。如要阅读本…

吴恩达深度学习——对象检测

内容来自https://www.bilibili.com/video/BV1FT4y1E74V&#xff0c;仅为本人学习所用。 文章目录 对象定位特征点检测基于滑动窗口的目标检测算法原理将全连接层转化成卷积层通过卷积实现滑动窗口检测算法 YOLOBounding Box预测交并比非极大值抑制Anchor BoxYOLO检测训练集中预…

unordered_map/set的哈希封装

【C笔记】unordered_map/set的哈希封装 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】unordered_map/set的哈希封装前言一. 源码及框架分析二.迭代器三.operator[]四.使用哈希表封装unordered_map/set后言 前言 哈…

mybatis plus 持久化使用技巧及场景

mybatis plus提供了很多强大的持久化工具&#xff0c;新手容易对这些工具使用困难&#xff0c;下面我总结了一下mybatis plus持久化的使用技巧及使用场景。 一、持久化 官方文档&#xff1a;https://baomidou.com/guides/data-interface/ &#xff08;一&#xff09;通过ser…