【C++学习笔记三】C++多态、抽象(接口)
当类之间存在多种层次结构,并且类之间通过继承关联时就会用到多态。
虚函数在子类中的覆盖版本和该函数在基类中的原始版本必须有相同的函数签名、函数名、形参名、常属性。如果返回值为非类类型,则必须相同,如果是类类型A的指针或者引用,允许子类的覆盖版本返回A子类的的指针或者引用。
C++多态意味着调用成员函数时会根据函数的对象的类型来执行不同的函数。
使用多态以后就可以通过基类的指针来指向不同的派生类来实现函数的多态。
使用方式为在基类需要实现多态的函数的修饰符中加入virtual
。如果没有virtual
我们使用基类的指针只能访问到基类的方法。
想要了解更多关于基类指针指向派生类的问题可以看我的另一篇文章:传送门
使用virtual
修饰的函数称为虚函数,不同于一般函数的静态绑定,虚函数使用的时动态链接(后期绑定)
如果我们并不想在基类中实现虚函数(可能因为不会用到之类的原因),可以将虚函数声明为纯虚函数(接口),格式如下:
class A
{public://virtual void func(){}virtual void func() = 0;//==0告诉编译器,函数没有主体,这是一个纯虚函数
};
包含纯虚函数的类叫做抽象类,**抽象类不能被实例化,但可以定义指针。**虚函数还是需要实现的,如果不想写可以写成{}
当用基类指针指向派生类对象在动态分配堆上内存的时候,析构函数必须是虚函数!!!
友元函数不是成员函数,因此不能虚拟。
父类的虚函数或纯虚函数在子类中仍然是虚函数,有时我们不希望父类的某个函数在子类中被重写,在C++11后的版本可以使用final
(放在函数声明之后,函数体之前)来避免被重写,如果不希望一个类被继承也可以用final
关键字(放在类声明之后类体之前)
【C++学习笔记三】C++多态、抽象(接口)相关推荐
- 【Java学习笔记三】抽象类与接口
对象的类型转换分为自动转换和强制转换两种 派生类向基类转换是自动转换,因为派生类中包含基类 基类向派生类的转换是强制转换 强制类型转换是通过在转换对象前面使用圆括号运算符来实现,圆括号内为要转换的目标 ...
- K8S 学习笔记三 核心技术 Helm nfs prometheus grafana 高可用集群部署 容器部署流程
K8S 学习笔记三 核心技术 2.13 Helm 2.13.1 Helm 引入 2.13.2 使用 Helm 可以解决哪些问题 2.13.3 Helm 概述 2.13.4 Helm 的 3 个重要概念 ...
- python3常用模块_Python学习笔记三(常用模块)
Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...
- Spring框架学习笔记(三)(AOP,事务管理)
Spring框架学习笔记(三) 九.AOP 9.1 AOP的注解配置 (1) 新建计算器核心功能(模拟:不能在改动核心代码) (2) 建立一个普通的Java类写增强代码(面向切面编程),使用Sprin ...
- SurfaceFlinger学习笔记(三)之SurfaceFlinger进程
概述 本系列是基于android Q 即android10 SurfaceFlinger学习笔记(一)应用启动流程 SurfaceFlinger学习笔记(二)之Surface SurfaceFling ...
- OpenCasCade学习笔记(三):加载显示STEP格式图片,并实现平移、缩放和旋转操作
OpenCasCade学习笔记(三):加载显示STEP格式图片,并实现平移.缩放和旋转操作 C3DWidget.h #pragma once#include <QtWidgets/QApplic ...
- ESP32学习笔记(7)——SmartConfig接口使用(ESP-Touch和AirKiss)
一.概述 SmartConfig是TI开发的一种配置技术,用于将新的Wi-Fi设备连接到Wi-Fi网络.它使用移动应用程序将网络凭据从智能手机或平板电脑广播到未配置的Wi-Fi设备. 该技术的优点是设 ...
- motan学习笔记 三 motan Demo 分析
motan学习笔记 一 微博轻量级RPC框架Motan motan学习笔记 二 motan架构分析 motan学习笔记 三 motan Demo 分析 motan学习笔记 四 motan Demo 之 ...
- J2EE学习笔记三:EJB基础概念和知识 收藏
J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...
- tensorflow学习笔记(三十二):conv2d_transpose (解卷积)
tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...
最新文章
- 图文详解并联机器人,你了解吗?
- 在angularjs应用中如何做选择评星的效果
- 【WebRTC专场】WebRTC的下个10年,又会有怎样的惊喜?
- WEB运用程序如何实现高效可维护?
- PYTHON——多线程:Thread类与线程函数
- 第一节 42字符串基础
- centos SSH免密登录
- 电容中那些独有的特性和功能,你有了解吗?
- PR转场预设 模仿纸张翻转特效PR视频转场PR预设
- vue2和vue3安装element-ui或element-plus插件与插件卸载
- 如何导入以前的qq聊天记录
- iDo网站在线设计系统的原理
- 前端性能优化之WebP图片
- 爱你的人和你爱的人 你选哪个?
- Adaboost算法介绍
- 学习Python,经常见到PEP,那么PEP是什么呢?
- 《PTA——拼题A》之第1016题
- Jaeger的客户端采样配置(Java版)(1),看这篇文章准没错
- Gopher转Rust辣眼睛语法排行榜
- 生不逢时的360搜索
热门文章
- C#与VB.NET代码互相转换在线工具
- 中文简体字-繁体字转换 WEB 服务(源代码)
- 微信 python 2020_2020年最新的Python操控微信教程
- 逆水寒服务器维护7.5,逆水寒7.26日维护到什么时候 逆水寒7.26日游戏改动汇总介绍...
- 如何把很多照片拼成一张照片_一张现场照片引发的中韩之争
- Windows mysql boost_Win7下Boost库的安装
- NXP KW38开发杂记(一)MCUXpress 运行进入NMI_Handler
- 【数据结构基础】【散列表】
- python方法items_Python字典items()方法与示例
- stl vector 函数_vector :: pop_back()函数以及C ++ STL中的示例