C++13、抽象类和虚表
来源:互联网 发布:淘宝网睡衣冬装男装 编辑:程序博客网 时间:2024/05/20 02:24
示例:
运行结果如下:
从结果我们可以看出了,PIX和PIY 只差了4个字节,原因呢?当然那是一个指针的距离,一个虚表指针的距离!
那什么是虚表呢?
答案如下:
C++中每个有虚函数的类或者虚继承的子类,编译器都会为它生成一个虚拟函数表(简称:虚表),表中的每一个元素都指向一个虚函数的地址。(注意:虚表是从属于类的)此外,编译器会为包含虚函数的类加上一个成员变量,是一个指向该虚函数表的指针(常被称为vptr),每一个由此类别派生出来的类,都有这么一个vptr。虚表指针是从属于对象的。
也就是说,如果一个类含有虚表,则该类的所有对象都会含有一个虚表指针,并且该虚表指针指向同一个虚表。虚表的内容是依据类中的虚函数声明次序--填入函数指针。派生类别会继承基础类别的虚表(以及所有其他可以继承的成员),当我们在派生类中改写虚函数时,虚表就受了影响;表中的元素所指的函数地址将不再是基类的函数地址,而是派生类的函数地址。
具体示例如下(下面程序代码示例源自
http://coolshell.cn/articles/12165.html
0 0
- 【c++】纯虚函数和抽象类
- C++_虚函数和抽象类
- [C++]纯虚函数和抽象类
- C#_抽象类和抽象方法
- 【C#】抽象类和接口
- C++13、抽象类和虚表
- C++:抽象基类和纯虚函数的理解
- C++:抽象基类和纯虚函数的理解
- C++:抽象基类和纯虚函数的理解
- c++------------之---【虚函数和抽象基类的应用】
- C#==>抽象类和抽象函数
- 抽象类和接口(C#)的区别
- C#——接口和抽象类
- C#——抽象类和接口
- 抽象类和接口 与 抽象方法和虚方法
- 抽象类和虚函数
- 虚函数和抽象类
- 抽象类和虚函数
- hdu 2639 01背包-K优解
- Ubuntu Hadoop 2.x 动态添加节点
- java- Java 8的新特性
- CategorySecond (vo,xml)
- 能否通过内嵌汇编修改C++中const常量的值
- C++13、抽象类和虚表
- 输出合并后的键值对
- GIT常用命令
- hello,New World
- 现在时间2016-06-26
- Shiro & CAS 实现单点登录
- Spark RDD详解
- C++ 观察者模式
- product (vo,xml)