C++纯虚函数和抽象类 制作饮品案例(涉及知识点:继承,多态,实例化继承抽象类的子类,多文件实现项目)

一.纯虚函数的由来

在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容。

例如:

#include<iostream>using namespace std;class AbstractCalculator
{
public:int m_Num1;int m_Num2;virtual int getResult(){return 0;}
};//加法计算器类
class AddCalculator :public AbstractCalculator
{
public:int getResult(){return m_Num1+m_Num2;}};
AbstractCalculator类是一个父类,里面 getResult()函数的实现是无意义的。
因此可以将虚函数改为纯虚函数。

二.纯虚函数语法

virtual 返回值类型 函数名(参数列表) = 0;

三.抽象类及特点

当类中有了纯虚函数,这个类也称为抽象类。
特点:
1.抽象类无法实例化对象
2.子类必须重写抽象类中的纯虚函数,否则也属于抽象类

四.制作饮品案例

在这里插入图片描述

4.1 单文件实现该案例

创建c++文件 drinking.cpp

#include<iostream>using namespace std;class AbstractDrinking
{
public://煮水virtual void Boil() = 0;//冲泡virtual void Brew() = 0;//倒入杯中virtual void PourInCup() = 0;//加入辅料virtual void PutSomething() = 0;//合并制作饮品流程void makeDrink(){Boil();Brew();PourInCup();PutSomething();}
};//制作咖啡
class Coffee: public AbstractDrinking
{
public:// 由于父类已经声明过virtual,所以子类不必在函数前加virtualvoid Boil(){cout<<"煮农夫山泉1"<<endl;}    void Brew(){cout<<"冲泡咖啡1"<<endl;}void PourInCup(){cout<<"倒入杯中1"<<endl;}void PutSomething(){cout<<"加入糖和牛奶1"<<endl;}
};int main()
{AbstractDrinking* drink;// Coffee(); 像是函数的声明,所以一般实例化类时,当构造函数为空,则不用加括号,直接 Coffee。drink = new Coffee;// drink = new Coffee();drink->makeDrink();delete drink;return 0;
}

linux端编译和运行:

按 ctrl+` 弹出终端

输入如下命令:

g++ drinking.cpp

生成一个可执行文件 a.out

# 执行
./a.out

4.1 多文件实现该案例

4.1.1创建include文件,在里面创建类的头文件,用来声明函数

AbstractDrinking.h
#pragma once
using namespace std;class AbstractDrinking
{
public://煮水virtual void Boil() = 0;//冲泡virtual void Brew() = 0;//倒入杯中virtual void PourInCup() = 0;//加入辅料virtual void PutSomething() = 0;void makeDrink();};
Coffee.h
#pragma once
#include<AbstractDrinking.h>
using namespace std;//制作咖啡
class Coffee: public AbstractDrinking
{
public:virtual void Boil();virtual void Brew();virtual void PourInCup();virtual void PutSomething();
};

4.1.2 创建src文件,里面放置类的实现

AbstractDrinking.cpp
#include "AbstractDrinking.h"//合并制作饮品流程
void AbstractDrinking::makeDrink()
{Boil();Brew();PourInCup();PutSomething();
}
Coffee.cpp
#include "Coffee.h"
#include<iostream>void Coffee::Boil()
{cout<<"煮农夫山泉"<<endl;
}    
void Coffee::Brew()
{cout<<"冲泡咖啡"<<endl;
}
void Coffee::PourInCup()
{cout<<"倒入杯中"<<endl;
}
void Coffee::PutSomething()
{cout<<"加入糖和牛奶"<<endl;
}

4.1.3 项目主目录创建main.cpp文件

#include<iostream>
#include "AbstractDrinking.h"
#include "Coffee.h"using namespace std;int main()
{AbstractDrinking* drink;drink = new Coffee;// drink = new Coffee1();drink->makeDrink();delete drink;return 0;
}

4.1.4 编译和执行

g++ main.cpp src/AbstractDrinking.cpp src/Coffee.cpp -Iinclude -o b.out
./b.out

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/205582.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘真相,成都瀚网科技抖音带货背后的秘密,原来这么靠谱!

导语&#xff1a;近年来&#xff0c;随着短视频平台的兴起&#xff0c;越来越多的商家开始利用抖音等平台进行带货。成都瀚网科技有限公司作为一家专业的互联网科技公司&#xff0c;其抖音带货业务也备受关注。那么&#xff0c;成都瀚网科技抖音带货可靠吗&#xff1f;本文将为…

基于springboot实现班级综合测评管理系统项目【项目源码+论文说明】

基于springboot实现班级综合测评管理系统演示 摘要 随着互联网技术的高速发展&#xff0c;人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以通过网络进行系统管理&#xff0c;交易等&#xff0c;而且过程简单、快捷。同样的&#x…

2023年中国宠物清洁用品分类、市场规模及发展特征分析[图]

宠物清洁用品指专用于清洁宠物毛发、口腔、耳部、脚爪等部位的各类宠物用品&#xff0c;包括宠物香波、滴耳露、修毛刀等。宠物主对宠物清洁用品需求的出现&#xff0c;一定程度上反映出部分宠物主与宠物间的感情逐渐加深&#xff0c;并逐渐达到了较为亲密的程度。随着宠物清洁…

MP3音频文件体积怎么缩小?压缩的方法有哪些?

压缩音频文件可减小文件的大小&#xff0c;从而更轻松地上传到其他平台&#xff0c;或轻松的通过电子邮件进行分享。除此之外&#xff0c;压缩音频文件还可以节省硬盘上的储存空间。那MP3音频文件体积怎么缩小呢&#xff1f;继续阅读可查看压缩的详细流程。 什么是音频文件压缩…

消息中间件——RabbitMQ(三)理解RabbitMQ核心概念和AMQP协议!

前言 本章学习&#xff0c;我们可以了解到以下知识点&#xff1a; 互联网大厂为什么选择RabbitMQ&#xff1f;RabbiMQ的高性能之道是如何做到的&#xff1f;什么是AMQP高级协议&#xff1f;AMQP核心概念是什么&#xff1f;RabbitMQ整体架构模型是什么样子的&#xff1f;Rabbi…

FSCTF2023-Reverse方向题解WP。学习贴

文章目录 [FSCTF 2023]signin[FSCTF 2023]MINE SWEEPER[FSCTF 2023]Xor[FSCTF 2023]EZRC4[FSCTF 2023]ez_pycxor[FSCTF 2023]Tea_apk[FSCTF 2023]ezcode[FSCTF 2023]ezbroke[FSCTF 2023]rrrrust!!![FSCTF2023]ezrev&#xff08;未解决&#xff09; [FSCTF 2023]signin UPX壳&am…

探索无限自然之美——Terragen Professional 4渲染软件

Terragen Professional 4是一款强大的自然环境渲染软件&#xff0c;为设计师、艺术家和电影制作人们带来了无限的创作可能性。无论是为游戏、电影、动画还是虚拟现实体验创建逼真的自然场景&#xff0c;Terragen Professional 4都能为您提供令人难以置信的结果。 Terragen Pro…

SAP_ABAP_面试篇_关于Function Module函数的三种处理类型

关于 Function Module 这个技术点&#xff0c;在面试过程中一般会考察以下几个问题&#xff1a; 1 函数处理类型的更新模式 一般会问到异步和事务&#xff08;逻辑单元 LUW&#xff09;&#xff0c;异步函数的调试方式、SM13监控更新函数的执行过程&#xff08;V1 与 V2 模式…

tokenizers Tokenizer 类

Tokenizer 类 依赖安装 pip install tensorflow pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simple基类原型 tokenizers.Tokenizer(model)基类说明 Tokenizer 函数构造一个分词器对象。分词方式主要有word-level、subword-level、char-level三种&#x…

备案信息一键查询:网站备案信息查询API的操作与优势

前言 在当今数字化的时代&#xff0c;企业的在线存在至关重要。而为了确保在网络空间的法规合规性&#xff0c;了解和管理网站备案信息变得尤为重要。为了使这一过程更为高效、便捷&#xff0c;网站备案信息查询API应运而生&#xff0c;为企业提供了一种简便的方式来获取和管理…

C++_String增删查改模拟实现

C_String增删查改模拟实现 前言一、string默认构造、析构函数、拷贝构造、赋值重载1.1 默认构造1.2 析构函数1.3 拷贝构造1.4 赋值重载 二、迭代器和范围for三、元素相关&#xff1a;operator[ ]四、容量相关&#xff1a;size、resize、capacity、reserve4.1 size、capacity4.2…

斯坦福NLP课程来了

生成式AI&#xff0c;尤其是以ChatGPT为首的大语言模型正在改变人们的生活方式&#xff0c;我想一定有小伙伴想加入NLP这个行列。 微软重磅发布4个适合初学者的机器学习资料 我在前一篇文章中分享了微软人工智能初学者课程&#xff0c;其中的【生成式AI】非常适合初学者&…