c++远征之多态篇——纯虚函数和抽象类、接口类
以下内容源于慕课网的学习整理,如有侵权,请告知删除。
1、纯虚函数
- 没有函数体;
- =0;
- 即只有函数声明,而没有函数定义的虚函数,是纯虚函数。
2、抽象类
- 概念:含有纯虚函数的类,叫抽象类。
- 抽象类无法实例化对象。
- 抽象类的子类也可能是抽象类。
(1)只有抽象类的子类把抽象类的纯虚函数都给实现了,才能用子类来实例化对象
3、接口类
- 概念:仅含有纯虚函数的类称为接口类。
- 没有任何数据成员,只有成员函数,而且成员函数都是纯虚函数。
- 接口类用来表达一种能力或协议。
- 传参是子类。
(1)细节
- 一个类可以继承接口类的同时也继承非接口类。
- 一个类可以继承一个接口类,也可以继承多个接口类。
- 可以使用接口类指针指向其子类对象,并调用子类对象中实现的接口类中纯虚函数。
- 不能使用接口类实例化对象。
(2)接口类代码示例
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;/*** 定义射击类:CanShut* 定义纯虚函数:aim、reload*/
class CanShut
{
public:virtual void aim() =0;virtual void reload() =0;
};/*** 定义枪类:Gun* 公有继承射击类* 实现成员函数:aim、reload*/
class Gun : public CanShut
{
public:virtual void aim(){cout << "Gun -- aim" << endl;}virtual void reload(){cout << "Gun -- reload" << endl;}
};/*** 定义含参函数射击:hunting* 调用参数的aim与reload函数*/
void hunting(CanShut* s)
{s->aim();s->reload();
}int main(void)
{// 实例化枪对象Gun* p=new Gun;// 调用含参函数hunting,将对象枪传入函数中hunting(p);// 释放内存delete p;p=NULL;return 0;
}
c++远征之多态篇——纯虚函数和抽象类、接口类相关推荐
- C++多态(二)——纯虚函数、抽象类
本篇涉及内容: 纯虚函数 抽象类 纯虚函数: 1)应用场景: 在多态中,通常父类中的虚函数是无意义的,一般情况下都会被子类重写,此时可以将父类中的这些虚函数改为纯虚函数. 2)纯虚函数语法:virtu ...
- <C++>多态之纯虚函数与抽象类,学习不一样的析构函数
在自己的世界里独善其身,在别人的世界顺其自然 ✨写在前面 书接上文, 今天继续学习多态的内容.上文提到了虚函数,那么今天就来讲讲什么是纯虚函数,抽象类和纯虚函数关联紧密,所以也学习一 ...
- C++ 多态之纯虚函数和抽象类01
纯虚函数的语法, virtual void func() = 0; 如果类中有了纯虚函数, 那么这个类也成为抽象类 抽象类无法实例化对象 继承了抽象类的子类,必须要重写父类中的纯虚函数,否则的话,子类 ...
- 9-2:C++多态之纯虚函数和抽象类以及接口继承和实现继承
文章目录 (1)纯虚函数和抽象类的概念 (2)抽象类的意义 (3)接口继承与实现继承 (1)纯虚函数和抽象类的概念 如果一个类的虚函数后面写上=0,同时不写它的实现,那么这样的虚函数称之为纯虚函数,包 ...
- c++入门(多态and纯虚函数and抽象类)
文件名:<1> shape.h :<2> circle.h :<3> circle.cpp :<4> rectangular.h :<5> ...
- C++_类和对象_C++多态_纯虚函数和抽象类---C++语言工作笔记072
然后我们再来看一下c++中的抽象类,以及纯虚函数是什么意思. 可以看到如果类中有纯虚函数,那么这个类,就可以称为抽象类. 抽象类,是无法实例化,跟java一样,子类继承抽象类,必须要重写抽象类中的方法 ...
- c/c++入门教程 - 2.4.7 多态、函数地址晚绑定(重写,虚函数,纯虚函数,抽象类,虚析构,纯虚析构)
目录 4.7 多态 4.7.1 多态的基本概念(超级重要) 4.7.2 多态的原理刨析(超级重要) 4.7.2 多态案例一:计算器类 4.7.3 纯虚函数和抽象类 4.7.4 多态案例二 - 制作饮品 ...
- C++学习12:C++多态、虚函数、虚析构函数、纯虚函数、抽象类
一 多态概述 C++中的多态分为静态多态和动态多态.静态多态是函数重载,在编译阶段就能确定调用哪个函数.动态多态是由继承产生的,指同一个属性或行为在基类及其各派生类中具有不同的语义,不同的对象根据所接 ...
- C++基本概念复习之二:多重继承、虚继承、纯虚函数(抽象类)
一.多重继承: #include <iostream> using namespace std; class Horse { public: Horse(){cout<<&qu ...
最新文章
- Social learning With Bayesian Agent and Random Decision Making
- php theme_path,PHP_Yii2主题(Theme)用法详解,本文实例讲述了Yii2主题(Theme) - phpStudy
- log4jdbc mysql jdbc_spring boot 集成log4jdbc 查看完整sql
- android so readelf.exe,android ndk中的工具使用
- a73*2+a53*2指的是什么_什么言四字词
- 哈工大博士历时半年整理的《Pytorch常用函数函数手册》开放下载!内含200余个函数!...
- 从零开始学前端:复习课程 --- 今天你学习了吗?(CSS:Day11)
- 客厅计算机笔记本cpu,我的家庭娱乐中心,适合客厅的 HTPC(家庭影院电脑)
- WPF教程(三十四)Hello, bound world!
- C++多线程 - 无锁编程
- 幻影机器人庄园参观路线_上海幻影机器人庄园攻略,上海幻影机器人庄园门票/游玩攻略/地址/图片/门票价格【携程攻略】...
- 魔兽世界服务器维护有哪些内容,魔兽世界wow服务器实装维护公告内容详情介绍_魔兽世界维护公告_快吧游戏...
- 网格计算, 云计算, 集群计算, 分布式计算, 超级计算
- Linux中将多块新硬盘合并成一个,挂载到/data目录下
- 敏捷培训: 如何使培训产生共鸣?
- 微信小程序真机调试连接不到后台服务器,解决微信小程序wepy真机预览跟本地表现不一样,数据变化了视图没变化...
- Python3 根据m3u8下载视频,批量下载ts文件并且合并
- NaN是什么? isNaN()/Number.NaN
- 工作日志之Sonar扫描错误处理-Sonar扫描结果入库 java.sql.BatchUpdateException: Incorrect string value: '\xF3\xA3\xAC\xB
- c语言字符substr,c substr()字符函数的使用方法