C++中基类数组无法使用多态的原因是什么
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,C++中基类数组无法使用多态的原因是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。原因:数组的分配是采用:首地址+偏移量的方式,
千家信息网最后更新 2025年12月02日C++中基类数组无法使用多态的原因是什么
C++中基类数组无法使用多态的原因是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
原因:
数组的分配是采用:首地址+偏移量的方式,而偏移量是固定大小的,例如:Node arry[10];
arry[i] 的地址:&arry[0]+i*sizeof(Node);
当Node是含有虚函数的基类的时候,arry[]中保存的都是基类Node的元素,因为数组的取值方式便是固定偏移量的,一旦数组中存储的是继承类的话,那么这个数组的取值方式,会导致出现不可见的错误。(备注:通常情况下会认为这个元素是基类)。
例子:
#includeusing namespace std;class Base {public:virtual void f();virtual void print();};void Base::f() {cout<<"Base f() ."<}void Base::print() {cout<< "Base print() ."<}class Derive :public Base{public:virtual void f();};void Derive::f() {cout<<"Derive f() ."<}int main() {Base a[5]; // 这里存储的是基类的数组Derive d;a[1] = d; // a[1]赋值 给继承类for(int i = 0; i <5; i++){a[i].f();//这里都会当走基类来处理}Base* b[2] = {NULL,NULL}; // 存储的是基类指针,指针的大小是固定的b[0] = new Base();b[1] = new Derive();for(int i = 0; i <2; i++){if (b[i] != NULL) {b[i]->f();// 这里会输出 继承类的内容delete b[i];}}return 0;}
Output:
Base f() .Base f() .// a[0].f()Base f() .Base f() .Base f() .Base f() . // b[0]->f()Derive f() . // b[1]->f()
输出结果分析:
1.通过上面的输出,可以看出一旦数组是基类,就算数组中的元素赋值为继承类,也是被当作基类来使用。
2.非要在数组中使用多态的话,可以采用指针的方式,指针的偏移量是固定的,可以使继承类的多态得到实现。
关于C++中基类数组无法使用多态的原因是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
数组
多态
指针
方式
偏移
原因
元素
问题
存储
输出
C++
中基
内容
地址
大小
更多
分析
帮助
解答
易行
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
巨量引擎网络技术招聘
筑牢网络安全网
郑州net软件开发收费报价表
如何把多年数据建立数据库
scrapy怎么爬数据库
数据库主键外键数据集
目前没有的产品或服务器
上海电商软件开发服务要求
金融科技互联网金融区别
网络安全五行属什么
软件开发mac还是win
无锡运营软件开发价目表
付培建学的什么网络技术
软件开发 视觉软件
双机备份简介 计算机网络安全
如何使用数据库中的备份
日常网络安全监测制度
天津信息化软件开发设施
达梦数据库用户名
class数据库user表
集群式服务器
电脑网络技术有什么用
数据库dataname
我的世界沫兮生存服务器
北京安塞网络安全有限公司
商城软件开发放心省心
服务器噪声大
保亭软件开发
魔兽抖音老雷在哪个服务器
服务器设备管理器怎么看