为什么C++中只有指针和引用才能实现多态?
2016-05-24 16:57
330 查看
代码:
分析:
在程序中:a.Debug调用的是A::Debug,而point_A->Debug调用的是B::Debug。
——对于程序A a = b而言,b内存布局在赋值的时候已经从B转换到A了,多于的数据都被丢弃,因此其就是一个A类型变量,那么a.Debug这里的a就是一个A类型的变量。
——对于point_A来说,它是一个指针,其类型虽然是A,但指向的区域的内容却是一个B类型的内存结构,虽然内存结果的布局与A兼容,但其虚函数表中的Debug却是B的实现。
class A { public: virtual void Debug(){} }; class B:public A { public: virtual void Debug(){} }; void main() { B b; A a = b; A * point_A = &b; a.Debug(); point_A->Debug(); }
分析:
在程序中:a.Debug调用的是A::Debug,而point_A->Debug调用的是B::Debug。
——对于程序A a = b而言,b内存布局在赋值的时候已经从B转换到A了,多于的数据都被丢弃,因此其就是一个A类型变量,那么a.Debug这里的a就是一个A类型的变量。
——对于point_A来说,它是一个指针,其类型虽然是A,但指向的区域的内容却是一个B类型的内存结构,虽然内存结果的布局与A兼容,但其虚函数表中的Debug却是B的实现。
相关文章推荐
- C++的重载(overload)与重写(override)
- C++实验6-输出星号图
- C++ 读写大文件代码
- C/C++整理
- C/C++中的转义字符
- 单链表实现多项式的相乘-c语言
- C++ 值传递、指针传递、引用传递
- 用C语言制作Web服务器
- c++ primer(第五版)学习笔记及习题答案代码版(第十一章)关联容器
- 《opencv3编程入门》代码(配合网盘视频,C语言)
- C++多线程编程入门之经典实例
- Windows下C语言调用dll动态链接库
- ACM算法训练之——下一个排列
- c++对象切片
- C/C++ 面试题
- C语言:算术运算符与算术表达式
- 如果你的C++程序打印出了“18446744073709551615”
- C语言程序设计50例(三)(经典收藏)
- Visual C++ 支持多字节字符集 (MBCS)
- 把一个十进制数转化为十六进制数【用c语言实现】