谈谈c++中继承中的虚函数
来源:互联网 发布:shopping系统源码下载 编辑:程序博客网 时间:2024/06/01 07:14
c++继 承中的虚函数
c++是一种面向对象的编程语言的一个很明显的体现就是对继承机制的支持,c++中继承分很多种,按不同的分类有不同分类方法,比如可以按照基类的个数分为多继承和单继承,可以按照访问权限分为public继承、protected继承和private继承,按照是否是虚拟继承可以分为virtual继承和non-virtual继承。当然这里的分类标准都是有重叠的部分,比如,non-virtual继承又可以分为单继承和多继承。这里要讨论的是虚函数,因此主要从virtual和non-virtual继承两个方面来展开讨论分析。
1、non-virtual继承
non-virtual继承又有两种情况单继承和多继承。来看一个例子:
class base1{public: virtual void f(){} virtual void h(){}};class base2{public: virtual void g(){}};class derive1:public base1{public:virtual void f(){}virtual void f1(){}}class derive2:public base1,public base2{public: virtual void f(){} virtual void g(){} virtual void g1(){}};
建立四个对象:
base1 b1;
base2 b2;
derive1 d1;
derive2 d2;
学习c++的都知道里面的虚函数表,上面的继承体系中各个类的虚函数表如下:
base1的虚函数表如下:
vptr-->base1::f base1::h//vptr为指向类的虚函数表的指针,-->表示的意思是指向一个表,后面的内容是表中的内容
base2的虚函数表如下:
vptr-->base2::g //
derive1的虚函数表如下:
vptr-->derive1::f base1::h derive1::f
derive2的虚函数表如下:
vptr1-->derive2::f base1::h derive2::g1 //base1
vptr2-->derive2::g //base2
在windows开发平台查看虚函数表如下:主机环境为 win7+vs2013(显示的不完全),在调试模式下:
2、virtual继承
虚继承是在多重继承中引入的一种技术,关于虚继承的分析讨论不是本文的重点,不了解的同学可以查看相关的c++书籍,下面要讲的是virtual中的虚函数。
class base1{public: virtual void f(){}};class base2{public: virtual void g(){}};class derive1:virtual public base1{public:virtual void f(){}virtual void f1(){}}class derive2:virtual public base1,virtual public base2{public: virtual void f(){} virtual void g(){} virtual void g1(){}};
通过vs2013查看虚函数表如下:
本文参考了知名技术博主左耳朵耗子在csdn上的博客,
博客地址为:http://blog.csdn.net/haoel/article/details/1948051
欢迎大家来讨论交流,欢迎转载,切勿用于商业用途,版权所有,转载必须注明出处。
0 0
- 谈谈c++中继承中的虚函数
- 谈谈C语言中的scanf()输入函数
- 【C++】虚函数在不同继承方式中的对象模型
- 谈谈c++中的继承问题
- 谈谈C 运行库中的安全字符串函数
- 多继承中重写不同基类中的虚函数
- 初识c#---继承和继承关系中的构造函数
- 多继承中的虚函数
- 多继承中的虚函数
- 多层继承中的虚函数
- C++,继承、虚函数解惑!
- C++,继承、虚函数解惑!
- 【继承与多态】C++:继承中的赋值兼容规则,子类的成员函数,虚函数(重写),多态
- 【继承与多态】C++:继承中的赋值兼容规则,子类的成员函数,虚函数(重写),多态
- 谈谈Java中的继承与组合
- 谈谈Java中的继承与组合
- 谈谈Java中的继承与组合
- 谈谈javascript中的prototype与继承
- 使用logstash+elasticsearch+kibana快速搭建日志平台
- 如何布局电子商务网站
- 作图的遗留问题,是建立内存图片不成功吗?以后解决。
- const char*和char* const
- IOS网络编程理解—网络的理解
- 谈谈c++中继承中的虚函数
- List集合筛选数据去掉重复,含有数据重复次数(JAVAAndroid)
- [iPhone高级] 基于XMPP的IOS聊天客户端程序(IOS端一)
- Perl笔记--my 与 local的区别
- pitch yaw roll 的区别
- 可重入和不可重入
- 第一个C程序
- Android菜鸟在成长-进度处理对话框:ProgressDialog
- android浪漫樱花凋零动态壁纸应用源码