C++中的虚函数、纯虚函数
2016-07-16 20:01
369 查看
C++最重要的特性就是多态,而多态,就主要通过虚函数实现的。具体的实现过程是:
基类中的函数定义为虚函数,派生类发生覆盖(即函数名称、参数列表、返回值类型完全相同)的情况下,派生类中的函数也会自动变成虚函数,不论加不加virtual关键字。此时,基类与子类对象中都会存在一张虚函数表(因为含有虚函数),具体虚函数表的结构可以参照这篇文章:http://blog.csdn.net/haoel/article/details/1948051/。如果使用基类指针访问函数时,会根据指针实际指向的对象的类型来调用基类或子类的函数,这里就是一种“动态”性,是在程序运行中动态的判断的。
而关于纯虚函数,首先纯虚函数具体定义格式如下:virtual <类型><函数名>(<参数列表>)=0;因为在很多情况下,基类中不能对虚函数给出有意的实现,或者,基类本身不是实体,仅仅是一种范畴或概念,比如,动物,动物又分为老虎、熊猫等等,动物本身不能实例化,所以可以通过纯虚函数定义,将它在派生类中进行实现,并且在各个派生类中可以有不同的实现,非常灵活。
此外,含有纯虚函数的类成为抽象类,由于纯虚函数没有具体的实现,因此抽象类不能实例化。
参考文章:
C++虚函数表解析:http://blog.csdn.net/haoel/article/details/1948051/
什么是虚函数、虚函数作用及使用方法:http://c.biancheng.net/cpp/biancheng/view/244.html
基类中的函数定义为虚函数,派生类发生覆盖(即函数名称、参数列表、返回值类型完全相同)的情况下,派生类中的函数也会自动变成虚函数,不论加不加virtual关键字。此时,基类与子类对象中都会存在一张虚函数表(因为含有虚函数),具体虚函数表的结构可以参照这篇文章:http://blog.csdn.net/haoel/article/details/1948051/。如果使用基类指针访问函数时,会根据指针实际指向的对象的类型来调用基类或子类的函数,这里就是一种“动态”性,是在程序运行中动态的判断的。
而关于纯虚函数,首先纯虚函数具体定义格式如下:virtual <类型><函数名>(<参数列表>)=0;因为在很多情况下,基类中不能对虚函数给出有意的实现,或者,基类本身不是实体,仅仅是一种范畴或概念,比如,动物,动物又分为老虎、熊猫等等,动物本身不能实例化,所以可以通过纯虚函数定义,将它在派生类中进行实现,并且在各个派生类中可以有不同的实现,非常灵活。
此外,含有纯虚函数的类成为抽象类,由于纯虚函数没有具体的实现,因此抽象类不能实例化。
参考文章:
C++虚函数表解析:http://blog.csdn.net/haoel/article/details/1948051/
什么是虚函数、虚函数作用及使用方法:http://c.biancheng.net/cpp/biancheng/view/244.html
相关文章推荐
- C++类的构造函数不能为虚函数的原因
- C++ STL库的总结以及实现原理
- error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int 错误的解决方法
- 在使用VC++6.0常见问题“Error spawning cl.exe”的解决方法
- C语言返回值详解
- leetcode_c++:链表:Remove Duplicates from Sorted List II(082)
- c语言中i++,++i的计算
- leetcode_c++:链表:Rotate List(061)
- 【字符串】C++字符串编程小结
- C++ FUNCTION FOR ACM
- C++笔记 explicit构造函数
- C++中多态的实现原理
- C++中基类和派生类之间的转换实例
- C++中的前向声明(ForwardDeclaration)
- C++静态库与动态库
- C++ PP Chapter VIII 函数探幽
- ROS学习之cpp教程
- Leetcode 171. Excel Sheet Column Number (Easy) (cpp)
- POJ 1200 Crazy Search
- [C++]高效使用关联容器的一些建议