C++_纯虚函数and抽象类

纯虚函数 and 抽象类

  • 介绍
    • 纯虚函数
    • 抽象类
    • 纯抽象类(俗称:接口类)

介绍

本文主要介绍 纯虚函数 和 抽象类

纯虚函数

直接看源码吧,纯虚函数样式为:virtual 类型 函数名(参数表) = 0;

源码

#include<iostream>
#include<string>
using namespace std;
class A
{
public://纯虚函数(仅做接口调用使用)virtual void Test(string) = 0;
};
class B :public A
{
public:void Test(string a){ cout << a << "Test" << endl; }
};
void main()
{//基类指针A *p = new B;p->Test("测试结果:"); system("pause");
}

运行结果

测试结果:Test
请按任意键继续. . .

抽象类

1.至少拥有一个 纯虚函数的类 称为抽象类
2.抽象类 不能实例化为对象
(PS:基类对象无法实例化,只能用 基类指针来指向不同的子类)
3.抽象类子类 必须对 基类中全部纯虚函数 提供有效覆盖,否则子类也是抽象类

  • 抽象类的使用
    例如 有几台不同品牌电视机,每一种品牌都有专属的显示方法(传输方法),将品牌分成多个子类进行区分
    1.我们只需要 创建一个抽象类
    2.创建一个相同名字成员的 纯虚函数 作为显示(传输)的调用方法
    3.这样使用 基类指针去指向不同的子类 则会调用不同的显示(传输)方法

源码

#include<iostream>
#include<string>
using namespace std;
//抽象类(至少拥有一个 纯虚函数的类 称为抽象类)
class A
{
public://纯虚函数(仅做接口调用使用)virtual void Test(string) = 0;
};
class B :public A
{
public://测试函数void Test(string a){ cout << a << "B" << endl; }
};
class C :public A
{
public://测试函数void Test(string a){ cout << a << "C" << endl; }
};
void main()
{//基类指针A *p = new B;p->Test("测试结果:"); delete p;//销毁 new 空间//基类指针p = new C;//改变基类指针指向 子类Cp->Test("测试结果:");delete p;//销毁 new 空间system("pause");
}

运行结果

测试结果:B
测试结果:C
请按任意键继续. . .

纯抽象类(俗称:接口类)

全部由 纯虚函数 构成的抽象类,称为 纯抽象类

#include<iostream>
#include<string>
using namespace std;
//纯抽象类(全部由 纯虚函数 构成的抽象类)
class A
{
public://纯虚函数(仅做接口调用使用)virtual void Test(string) = 0;//纯虚函数(仅做接口调用使用)virtual void foo(string) = 0;
};
//子类 B
class B :public A
{
public://测试函数void Test(string a){ cout << a << "B" << endl; }void foo(string str){cout << str << endl;}
};
//子类 C
class C :public A
{
public://测试函数void Test(string a){ cout << a << "C" << endl; }void foo(string str){cout << str << endl;}
};
void main()
{//基类指针A *p = new B;p->Test("测试结果:"); p->foo("B");delete p;//销毁 new 空间//基类指针p = new C;//改变基类指针指向 子类Cp->Test("测试结果:");p->foo("C");delete p;//销毁 new 空间system("pause");
}

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

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

相关文章

C++ 类 对象

C 在 C 语言的基础上增加了面向对象编程&#xff0c;C 支持面向对象程序设计。类是 C 的核心特性&#xff0c;通常被称为用户定义的类型。 类用于指定对象的形式&#xff0c;是一种用户自定义的数据类型&#xff0c;它是一种封装了数据和函数的组合。类中的数据称为成员变量&a…

MyBatis Plus wrapper A and (B or C or D)

Rt&#xff0c;怎么写这个wrapper呢&#xff1f; 例如我们有一个整数列表&#xff0c;数据库中存的是整数列表的字符串形式&#xff1a; list数据库中的存储1,2,3[1,2,3] 我们想查包含某几个数字的所有行。例如如果有1&#xff0c;那么结果中要有[1,2,3]、[1]。 // A Lambd…

在 WinForms 应用中使用 FtpWebRequest 进行文件操作和数据显示

在 WinForms 应用中使用 FtpWebRequest 进行文件操作和数据显示 引言 在企业级应用或桌面程序中&#xff0c;经常需要从远程服务器获取数据&#xff0c;并在用户界面上展示这些数据。本文将通过一个实际案例&#xff0c;演示如何在 Windows Forms 应用程序中使用 FtpWebReques…

互联网大厂职场各职级P6/P7和核心能力

目录 具体能力要求总结 具体能力要求 专业工匠 p5 被别人带领p6 独立完成项目全流程&#xff0c;指导 2-3 人 乐队指挥 p7 带行政团队 7-10 &#xff0c;项目团队&#xff0c;专项团队&#xff0c;复杂系统设计 1-3 个一般系统构成p8 领域专家 垂直 3 个团队 &#xff0c;横…

Qt/C++音视频开发63-设置视频旋转角度/支持0-90-180-270度旋转/自定义旋转角度

一、前言 设置旋转角度,相对来说是一个比较小众的需求,如果视频本身带了旋转角度,则解码播放的时候本身就会旋转到对应的角度显示,比如手机上拍摄的视频一般是旋转了90度的,如果该视频文件放到电脑上打开,一些早期的播放器可能播放的时候是躺着的,因为早期播放器设计的…

SQL-条件查询与聚合函数的使用

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…

xbox无法登录、没有反应解决方法分享

如果你遇到了Xbox无法登录或没有反应的问题&#xff0c;可以尝试以下几种解决方法&#xff1a; 重启Xbox&#xff1a; 关闭Xbox。等待一分钟。重新启动Xbox。 检查Xbox Live服务状态&#xff1a; 访问Xbox Live服务状态网页&#xff08;官方网站&#xff09;检查是否有任何服务…

架构01 - 知识体系详解

架构&#xff0c;又称为知识体系&#xff0c;是指在特定领域或系统中的组织结构和设计原则。它涵盖了该领域或系统的核心概念、基础理论、方法技术以及实践经验等。架构的主要作用是提供一个全面且系统化的视角&#xff0c;帮助人们理解和应用相关知识&#xff0c;并指导系统的…

微信小程序开发WebSocket通讯

官方文档说明&#xff1a;入口 WebSocket连接的链接只支持wss加密方式&#xff0c;且只能用域名的方式 该域名还要在微信公众平台的小程序中登记才能使用&#xff0c;开发->开发管理->服务器域名->修改 该域名要和https使用的一致 以域名地址&#xff1a;dtu.aab…

Python基础(二十七、继承复写、注解)

文章目录 一、继承1.复写2.调用父类同名成员3.代码示例 二、注解1.变量注解2.函数注解3.Union联合注解语法如下&#xff1a;示例&#xff1a;注意事项&#xff1a; 一、继承 1.复写 子类继承父类的成员属性和成员方法后&#xff0c;如果对其“不满意”&#xff0c;那么可以进…

【Microsoft Copilot】手机端发布 ——GPT-4, DALL-E3 免费用

Microsoft Copilot 关于Microsoft CopilotMicrosoft Copilot 的特点1. 可以在手机端使用&#xff1a;2. 可以免费使用GPT-4。3. 可以无限制地使用GPT-4。4. 可以使用DALL-E3生成图片。5. 搜索功能6. 图像识别 Microsoft Copilot的缺点和注意事项1. 非常容易报错2. 不支持长篇聊…

树状结构查询 - 华为OD统一考试

OD统一考试 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 通常使用多行的节点、父节点表示一棵树&#xff0c;比如&#xff1a; 西安 陕西 陕西 中国 江西 中国 中国 亚洲 泰国 亚洲 输入一个节点之后&#xff0c;请打印出来树中他的所有下层节点。 …

【Python_PySide6学习笔记(二十八)】基于PySide6实现移动窗体到屏幕中间位置

基于PySide6实现移动窗体到屏幕中间位置 基于PySide6实现移动窗体到屏幕中间位置前言一、背景介绍二、实现思路三、具体代码四、函数调用五、实现效果基于PySide6实现移动窗体到屏幕中间位置 前言 在 【Python_PySide2学习笔记(十)】移动窗体到屏幕中间位置 中介绍过移动窗…

靶机实战(10):OSCP备考之VulnHub Tre 1

靶机官网&#xff1a;Tre: 1[1] 实战思路&#xff1a; 一、主机发现二、端口发现&#xff08;服务、组件、版本&#xff09;三、漏洞发现&#xff08;获取权限&#xff09; 8082端口/HTTP服务 组件漏洞URL漏洞&#xff08;目录、文件&#xff09;80端口/HTTP服务 组件漏洞URL漏…

鸿蒙Harmony--状态管理器-@Observed装饰器和@ObjectLink装饰器详解

经历的越多&#xff0c;越喜欢简单的生活&#xff0c;干净的东西&#xff0c;清楚的感觉&#xff0c;有结果的事&#xff0c;和说到做到的人。把圈子变小&#xff0c;把语放缓&#xff0c;把心放宽&#xff0c;用心做好手边的事儿&#xff0c;该有的总会有的! 目录 一&#xff…

kafka下载安装部署

Apache kafka 是一个分布式的基于push-subscribe的消息系统&#xff0c;它具备快速、可扩展、可持久化的特点。它现在是Apache旗下的一个开源系统&#xff0c;作为hadoop生态系统的一部分&#xff0c;被各种商业公司广泛应用。它的最大的特性就是可以实时的处理大量数据以满足各…

面试算法115:重建序列

题目 长度为n的数组org是数字1&#xff5e;n的一个排列&#xff0c;seqs是若干序列&#xff0c;请判断数组org是否为可以由seqs重建的唯一序列。重建的序列是指seqs所有序列的最短公共超序列&#xff0c;即seqs中的任意序列都是该序列的子序列。 例如&#xff0c;如果数组org为…

初识Hadoop-概述与关键技术

一.大数据概述 1.什么是大数据 高速发展的信息时代&#xff0c;新一轮科技革命和变革正在加速推进&#xff0c;技术创新日益成为重塑经济发展模式和促进经济增长的重要驱动力量&#xff0c;而“大数据”无疑是核心推动力。 那么&#xff0c;什么是“大数据”呢&#xff1…

初识C#语言

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、C#语言以及特点C# 强大的编程功能 二、C# 与 .NET三、.NET 与 .NET Framwork.Net 框架&#xff08;.Net Framework&#xff09;.NET 与 .NET Framework 总结…

MySQL基础命令

1.SQL语句基础 1.1 SQL简介 SQL&#xff1a;结构化查询语言(Structured Query Language)&#xff0c;在关系型数据库上执行数据操作、数据检索以及 数据维护的标准语言。使用SQL语句&#xff0c;程序员和数据库管理员可以完成如下的任务 改变数据库的结构 更改系统的安全设置 …