抽象类(纯虚函数、虚函数)和虚基类(虚继承)
C++多态
C++的多态包括静态多态和动态多态,静态多态包括函数重载和泛型编程,动态多态包括虚函数。静态多态实在编译期间就能确定,动态多态实直在程序运行时才能确定。
抽象类
虚函数
在默认情况下对函数成员调用实施的是静态连编,也叫做静态绑定。如果子类中的函数fff覆盖了父类中的函数fff,那么基类中的其他函数调用函数fff的时候调用的仍然是基类中的函数而不是子类的。
为了解决这个问题可以在基类和子类的fff函数前加上virtual
关键字,该函数就会变成虚函数,当在子类中调用基类的函数时,如果该函数调用到函数fff调用的就是子类的函数。
对于虚函数,编译器完成的是动态连编(动态绑定)面对虚函数的调用是在程序运行的时候确定的。
纯虚函数
在实际编程中我们有些方法经常没有办法实现(没有对应的成员或者不同的子类实现方法不同),我们就将函数声明为纯虚函数,这样就不需要实现。纯虚函数的声明形式为:
virtual 返回类型 方法名(参数列表)=0;
抽象类指的是含有纯虚函数或者基类的纯虚函数还没有将其实现的类。
很显然,抽象类是不能被实例化的。只有子类中将所有的纯虚函数都实现了以后(此时就不是抽象类了)才可以进行实例化。
虚继承和虚基类
在多重继承时如果我们继承的类继承于同一个类(或者继承的类之间有继承关系等)就会出现多个相同的成员的情况,在访问这些成员的时候我们必须加上基类的名字空间来进行区别,否则就会出错。
但是一般情况下这种重复的变量是没有什么意义的,为了解决这种重复冲突加浪费的问题,我们可以使用虚继承,即在继承的时候在基类的名字前加上virtual
,这样当其他类再继承这个类的时候如果已经继承了更上层的基类只会保存一份成员。
虚继承的目的时让某个类作出声明,承诺愿意共享它的基类。其中这个被共享的类称为虚基类。
抽象类(纯虚函数、虚函数)和虚基类(虚继承)相关推荐
- 虚继承c语言例子,C/C++ 多继承{虚基类,虚继承,构造顺序,析构顺序}
C/C++:一个基类继承和多个基类继承的区别 1.对多个基类继承会出现类之间嵌套时出现的同名问题,如果同名变量或者函数出现不在同一层次,则底层派生隐藏外层比如继承基类的同名变量和函数,不会出现二义性, ...
- c++ 基类和派生类的虚函数表是否为同一个
总结 派生类实现基类的虚函数时,基类中虚函数表和派生类的虚函数表地址不同,基类虚函数表中的虚函数地址和派生类虚函数表中的虚函数地址不同: 派生类不实现基类的虚函数时,基类中虚函数表和派生类中虚函数表地 ...
- 【C++】多态(早期绑定、后期绑定)、抽象类(纯虚函数)、虚析构函数
我们都知道面向对象编程的三大特征是封装.继承.多态,今天我们就来说一下其中之一的多态. 概念: 多态: 多态字面意思就是多种形态,C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同 ...
- C++ 多态性之虚函数抽象类纯虚函数
一. 虚函数 1.什么是虚函数:虚函数的定义是在基类中进行的,被 virtual 修饰的,当基类中的某个成员函数被声明为"虚函数"后,可以在一个或多个派生类中重新定义该函数,重新定 ...
- 基类、派生类、虚基类、虚函数、虚析构、纯虚函数、抽象类
基类:被其它类通过继承方式作为父类继承的类称为基类:描述派生类的统一种类的方式. 派生类:通过继承其他类(并可能含有自定义成员)实现的子类:为提高代码的重用性及与同样继承于同一个父类的其它类形成统一种 ...
- 但并不从包含函数声明的接口派生_C++的虚函数和纯虚函数
虚函数:类成员函数前面添加virtual关键字,则该函数被称为虚函数. 纯虚函数:在虚函数的基础上,在函数末尾加上 = 0. class Animal {public: virtual void Sh ...
- C++之抽象基类与纯虚函数
// Vitual_Base.cpp : Defines the entry point for the console application. //抽象基类与纯虚函数#include " ...
- python虚函数_Python进阶话题杂谈(十三)纯虚函数与抽象基类
纯虚函数与抽象类都是Python面向对象中重要的编程范式,用于对继承类做强制性接口实现约定. abc模块包含了一系列与抽象基类与纯虚函数相关的方法.Python中通过修改元类进行抽象基类的设定.这里P ...
- c++中的虚特性(虚基类、虚函数、纯虚函数)
1. 虚基类 1.1 虚基类作用 为了解决多继承时的命名冲突和冗余数据问题,使得派生类中只保留一份间接基类的成员. 其本质是是让某个类做出声明,承诺愿意共享它的基类.其中,这个被共享的基类就称为虚基类 ...
- 虚基类、虚函数和纯虚基类
http://blog.csdn.net/lovemysea/article/details/5298589 首先看一个例子: class Base { public: virtual voi ...
最新文章
- 用ElasticSearch搭建自己的搜索和分析引擎
- python 人脸检测
- 赛道一出,今后无需再熬夜
- windows上配置jdk环境变量
- python彩票分析_数字化场景应用平台加持,开课吧学员Python挑战赛秀出代码精彩...
- notebook中kiil进程从而释放显存的方法
- 编程方法学15:指针要点回顾
- boost::sort模块实现提供多种分布的灵活随机数生成器的测试程序
- php对mysql基础操作_php+mysql的基础操作
- 阿里研究院:数据治理解决方案,附7篇数据治理完整版PDF下载
- 关于webstorm链接不上SVN的解决办法
- 计算机能考四川司法学院吗,四川司法警官职业学院计算机文化基础课程在线考试系统...
- iframe 父页面 子页面互相取值调用
- openwrt源码下载
- 2022年30本新年书单(要么旅行,要么读书,身体和灵魂总有一个在路上)
- 【阅读源码系列】ThreadPoolExecutor源码
- 【作业】随机数+参数可变的方法+实验任务(输出素数+使用递归,判断是否为回文+统计一篇英语问斩单词出现频率)...
- 纯JS实现懒加载+瀑布流布局
- 精选汇总 | 开心一刻
- 设计模式——观察者(监听者,订阅)模式||线程安全||c++详解
热门文章
- 010 pandas的DataFrame
- CCF - 201403-3 - 命令行选项
- 数据结构与算法2——数组
- 如何更改Visual Studio 2008中类文件引用的默认名称空间?
- 前后对接数字几_开源数字货币交易所开发学习笔记(1)——系统架构
- java21个知识点重点_java21个知识点重点
- string类有可以调换方向的函数吗_String类中常用的操作
- mysql5.6.13_MySQL-5.6.13解压版(zip版)安装配置教程
- 腾讯吃鸡 android,腾讯吃鸡手游《光荣使命》正式上线:安卓/iOS不限号测试
- linux夏令时配置文件,Linux夏令时是怎么调整的?