类的垂直关系中,如何把握纯虚函数
下面看看一个跟虚函数相关的几个名词:
抽象类:
含有纯虚函数的类,称作抽象类。
抽象类是不能实例化的,就是不能定义抽象类的对象,但是可以定义抽象类的指针变量。
抽象类往往是对问题领域进行分析和设计以后得出的一个抽象概念,是对一系列看上去不太相同,但是本质上却是相同的具体概念的一个抽象。
抽象基类:
抽象类可以在继承树的任意位置(顶部、中间、末尾),然而一个抽象类在继承树的尾部不太可能,也不应该这么设计,因为那是去了作为抽象类的意义。
抽象类处在继承树的顶部时就称此抽象类为抽象基类。
抽象类也可以在继承树的中间,是因为他可以有自己的定义的纯虚函数,同时实现其父类提供的纯虚函数接口。
对于继承树中还有几个基本的概念。当一个类A继承另外一个类B时;类A称为导出类、继承类、子类;类B称为父类、基类或超类;
虚函数:
(微软官方给出的解释)虚函数是指一个类中你希望重载的成员函数,当你用一个基类的指针或者是引用指向一个继承类的对象时,你调用一个虚函数,实际上调用的是继承类的版本。
纯虚函数:
只提供接口,没有实现。
纯虚函数在基类中是没有实现的,定义它仅仅是为了实现动态绑定而提供的一个接口,起到一个规范的作用。
规范是什么呢?那就是继承这个类的派生类中必须实现这个函数。可以反过来想,如果派生类不进行对父类纯虚函数的实现,那怎么动态绑定啊,难道要绑定一个没有实现(仅仅是一个声明的、没有实质作用)的函数么?
维基百科(Wikipedia):Virtual function的解释
继承关系引进虚函数给Dll导出带来的一种机制
C++中的DLL导出类之后对于维护和修改很可能遭遇Dll Hell
类与类之间的几种XML关系
有别于C++继承关系_窗口子类化1
有别于C++继承关系_窗口子类化2
类的重载、重写、覆盖---调试其中的例子---多么痛的领悟
动态绑定和静态绑定的几种不同形式
虚函数与动态绑定
类的垂直关系中,如何把握纯虚函数相关推荐
- C++中为什么要引入抽象基类和纯虚函数?
为什么要引入抽象基类和纯虚函数? 主要目的是为了实现一种接口的效果. 抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层. ⑴抽象类的定义:带有纯虚函数的类为抽象类. ...
- 第十三周项目三-形状类族中的纯虚函数
/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年6月1日 *版 本 ...
- C++引入抽象基类和纯虚函数的作用和目的
为什么要引入抽象基类和纯虚函数? 主要目的是为了实现一种接口的效果. 原文链接:https://blog.csdn.net/weibo1230123/article/details/82014322 ...
- C++ day24 继承(四)抽象基类,纯虚函数,protected
文章目录 关键字protected(带来方便同时带来危险,最好不用) 抽象基类和纯虚函数(is-a关系用公有继承实现有时候也不太合适) 用圆和椭圆的笨拙派生为例,挑拨is-a和公有继承的搭档关系 替代 ...
- C++之抽象基类与纯虚函数
// Vitual_Base.cpp : Defines the entry point for the console application. //抽象基类与纯虚函数#include " ...
- 【C++】C++类的学习(五)——纯虚函数与抽象类
[fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 在前面的博客中讲到了虚函数,今天讲述一种特别的虚函数--纯虚函数,以及与之相关的抽象类 ...
- python虚函数_Python进阶话题杂谈(十三)纯虚函数与抽象基类
纯虚函数与抽象类都是Python面向对象中重要的编程范式,用于对继承类做强制性接口实现约定. abc模块包含了一系列与抽象基类与纯虚函数相关的方法.Python中通过修改元类进行抽象基类的设定.这里P ...
- 虚函数与纯虚函数以及虚函数表之间的关系
1.虚函数 简单地说,那些被virtual关键字修饰的成员函数,就是虚函数.C++中虚函数的作用主要是实现多态机制.所谓多态就是用父类指针指向子类对象,然后通过父类指针调用实际子类的成员函数,这种技术 ...
- c++ 虚函数多态、纯虚函数、虚函数表指针、虚基类表指针详解
文章目录 静态多态.动态多态 虚函数 哪些函数类型不可以被定义成虚函数? 虚函数的访问方式 析构函数中的虚函数 虚函数表指针 vptr 多继承下的虚函数表 虚基类表指针 bptr 纯虚函数 抽象类 虚 ...
最新文章
- linux常用命令汇总
- 直播系统开发:功能创新提升用户留存
- Homestead 集成开发环境配置
- sql server 2005 sa登录失败解决方法
- 双系统,重装windows后修复linux的grub启动
- linux gcc march arch,Gcc的spec中arch什么的指定
- Android之图片边显示模糊原因
- java程序输出88的0 1矩阵_《剑指Offer》Java实现--顺时针打印矩阵
- 快速上手Tomcat
- Qt调用工业相机之映美精相机
- 拳皇97用什么计算机语言编写,拳皇97这几个人物非常适合新手,用来打电脑可轻松通关...
- c++编程迷宫小游戏
- 教你制作第一个C++游戏!#1 引入
- 新手提问!求解答QAQADODB.Recordset 错误 #x27;800a0bb9#x27; 参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。
- Gradle配置文件解决你的问题。
- 如何选择智能车牌识别摄像机
- Dynamics CRM 数据迁移工具DataMigrationUtility
- emacs官方中文手册
- 手机上怎么打字才能快?
- ElasticSearch - CURD