在面向对象程序设计领域,C++、Object Pascal 等语言中有虚函数(英语:virtual function)或虚方法(英语:virtual method)的概念。这种函数或方法可以被子类继承和覆盖,通常使用动态调度实现。
纯虚函数或纯虚方法是一个需要被非抽象的派生类覆盖(override)的虚函数. 包含纯虚方法的类被称作抽象类; 抽象类不能被直接实例化。 一个抽象基类的一个子类只有在所有的纯虚函数在该类(或其父类)内给出实现时, 才能直接实例化. 纯虚方法通常只有声明(签名)而没有定义(实现),但有特例情形要求纯虚函数必须给出函数体定义.
虚函数示例
1 | # include <iostream> |
以下是虚函数 Animal::eat() 的输出:
1 | I eat like a generic Animal. |
纯虚函数示例
在C++语言中, 纯虚函数用一种特别的语法[=0]定义。
1 | class Abstract { |
纯虚函数的定义仅提供方法的原型. 虽然在抽象类中通常不提供纯虚函数的实现, 但是抽象类中可以包含其实现, 而且可以不在声明的同时给出定义[2]. 每个非抽象子类仍然需要重载该方法, 抽象类中实现的调用可以采用以下这种形式:
1 | void Abstract::pure_virtual() { |
参考链接
- 虚函数和纯虚函数的区别,by hackbuteer1.
- 虚函数,by wikipedia.
- C++中虚析构函数的作用,by StarLee.
- 开源免费的C/C++网络库(c/c++ sockets library) 七剑下天山,by 工程师WWW.
- VS2010中属性页中,C/C++ –>预处理器定义,by J.M.Liu.
- 深入理解C/C++混合编程(关于#ifdef __cplusplus extern “C” {…}的用法),by zzwdkxx.
- 带你玩转 Visual Studio——带你多工程开发,by luoweifu.
- c++中冒号(:)和双冒号(::)的用法,by 小金乌会发光-Z&M.
- C++ 构造函数总结,by chaibubble.
- 详谈C++保护成员和保护继承,by C语言中文网.
- c++ 内联函数(一看就懂),by 兴趣斗士.
- 浅析C++类的内存布局,by 冯Jungle.
- 图说C++对象模型:对象内存布局详解,by melonstreet.
- C++ 对象的内存布局,by 陈皓.
- C++类对象的内存布局,by 一叶知秋dong.
- C++中类所占的内存大小以及成员函数的存储位置,by SOC罗三炮.
- struct的用法和struct的对齐原则,by 马小超i.