C++虚函数与纯虚函数用法与区别
1. 虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。
2. 虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(base class)只有声明而没有定义。
3. 虚函数和纯虚函数都可以在子类(sub class)中被重载,以多态的形式被调用。
4. 虚函数和纯虚函数通常存在于抽象基类(abstract base class -ABC)之中,被继承的子类重载,目的是提供一个统一的接口。
5. 虚函数的定义形式:virtual {method body}
纯虚函数的定义形式:virtual { } = 0;
在虚函数和纯虚函数的定义中不能有static标识符,原因很简单,被static修饰的函数在编译时候要求前期bind,然而虚函数却是动态绑定(run-time bind),而且被两者修饰的函数生命周期(life recycle)也不一样。
6. 虚函数必须实现,如果不实现,编译器将报错,错误提示为:
error LNK****: unresolved external symbol "public: virtual void __thiscall
ClassName::virtualFunctionName(void)"
7. 对于虚函数来说,父类和子类都有各自的版本。由多态方式调用的时候动态绑定。
8. 实现了纯虚函数的子类,该纯虚函数在子类中就编程了虚函数,子类的子类即孙子类可以覆盖
该虚函数,由多态方式调用的时候动态绑定。
9. 虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的
函数
10. 多态性指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。
a.编译时多态性:通过重载函数实现
b 运行时多态性:通过虚函数实现。
11. 如果一个类中含有纯虚函数,那么任何试图对该类进行实例化的语句都将导致错误的产生,因为抽象基类(ABC)是不能被直接调用的。必须被子类继承重载以后,根据要求调用其子类的方法。
#include<iostream>
using namespace std;class Virtualbase{public:virtual void Demon() = 0; //prue virtual functionvirtual void Base() { cout << "this is farther class" << endl; }};//sub classclass SubVirtual :public Virtualbase{public:void Demon() {cout << " this is SubVirtual!" << endl;}void Base() {cout << "this is subclass Base" << endl;}};void main(){Virtualbase* inst = new SubVirtual(); //multstate pointerinst->Demon();inst->Base();// inst = new Virtualbase();// inst->Base()system("pause");return;}
}结果:1. 子类实现2. 打印基类
C++虚函数与纯虚函数用法与区别相关推荐
- 虚函数、纯虚函数、虚继承、多继承
来源:http://www.tnove.com/?p=57 C++的一个特征是多太,其中多态主要表现在 1.编译时多态 函数overload实现 2.运行是多态 虚函数override实现 其中虚 ...
- 栈内存 ,堆内存区别 C++ 动态内存 == 与equal区别 复合函数奇偶性 三角函数转换公式: 虚函数和纯虚函数: C++ 中的运算符重载 数据封装,数据抽象 C++ 接口(抽象类
目录 栈内存 ,堆内存区别 C++ 动态内存 == 与equal区别 复合函数奇偶性 三角函数转换公式: 虚函数和纯虚函数: C++ 中的运算符重载 数据封装,数据抽象 C++ 接口(抽象类): #和 ...
- C++ 多态 虚函数与纯虚函数
C++ 多态 虚函数与纯虚函数 虚函数是C++重要思想-多态中不可或缺的一个知识点与用法,但初学者一般很难理解,在这里用通俗语言介绍一下. 百度百科: 在某基类中声明为 virtual 并在一个或多个 ...
- C++(十五)虚函数和纯虚函数(抽象类)
文章目录 一.虚函数 二.纯虚函数 三.虚析构函数 四.虚函数与纯虚函数用法与区别 关于C++中面向对象的多态特性,多态:即多种形态.在C++中一般是这么解释的:向不同的对象发送同一个消息,不同的对象 ...
- C++经典问题_06 虚函数和纯虚函数以及多态
文章目录 一. 虚函数和纯虚函数以及多态的概念 二. 虚函数详解 ① 虚函数的定义 ② 虚函数和普通函数重写时候的区别 ③ 虚函数的常见错误 ④ 如何避免虚函数的使用错误 三. 虚函数指针和虚函数表 ...
- C++学习12:C++多态、虚函数、虚析构函数、纯虚函数、抽象类
一 多态概述 C++中的多态分为静态多态和动态多态.静态多态是函数重载,在编译阶段就能确定调用哪个函数.动态多态是由继承产生的,指同一个属性或行为在基类及其各派生类中具有不同的语义,不同的对象根据所接 ...
- 但并不从包含函数声明的接口派生_C++的虚函数和纯虚函数
虚函数:类成员函数前面添加virtual关键字,则该函数被称为虚函数. 纯虚函数:在虚函数的基础上,在函数末尾加上 = 0. class Animal {public: virtual void Sh ...
- 一口气搞懂《虚函数和纯虚函数》
学习C++的多态性,你必然听过虚函数的概念,你必然知道有关她的种种语法,但你未必了解她为什么要那样做,未必了解她种种行为背后的所思所想.深知你不想在流于表面语法上的蜻蜓点水似是而非,今天我们就一起来揭 ...
- C++知识点51——虚函数与纯虚函数(下)
接上一篇文章https://blog.csdn.net/Master_Cui/article/details/109957146 10.练习 示例 class base { public:base() ...
最新文章
- 报告 | 2019年全球数字化转型现状研究报告
- 大恶人吉日嘎拉之走火入魔闭门造车之.NET疯狂架构经验分享系列之(一)后台控制逻辑代码部分...
- 福大软工1816 · 第七次作业 - 需求分析报告之拖鞋旅游队
- Android system server之PackageManagerService详细分析
- 解决AIX报错0506-342 无法挂载分区问题
- mysql php 新手卡生成_PHPMaker(基于MYSQL数据库自动生成PHP 脚本的软件)
- 斜堆学习笔记+复杂度证明
- 安卓如何修改华强北二代耳机敲击指令?
- VS2010皮肤控件介绍
- 除以13(信息学奥赛一本通-T1175)
- 漫步数学分析十三——路径连通
- Java-Android 之Hello World
- 实时帧数手机_方便好用的手机帧数记录软件
- 【卡尔曼滤波原理及基本认知】
- 小米手机的miui10 连接电脑。本地播放器推荐。
- 梦之光芒Monyer (全关解析)
- Python 办公效率化学习(自学)三.Excel文件读取
- nginx笔记1:nginx指令与上下文
- 微信怎样将图片上的文字变成文档
- OUC软件开发实验5
热门文章
- 教你Mac电脑复制手机粘贴的隐藏玩法
- python购物车典例_Python实现的购物车功能示例
- servu无法显示远程文件夹_win10软件:解决文件资源管理器无法显示文件夹大小...
- python习题集整理汇总
- 2.3基本算法之递归变递推_3525上台阶
- 计算机小知识分享,分享几小个计算机操作技巧
- STM32学习之总线与时钟
- 生成器 python0 1 8 27 64_python 生成式和生成器
- python实例属性引用-python之对象(实例)
- Python文档阅读笔记-OpenCV中Template Matching