C++中基类数组无法使用多态的原因是什么
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,C++中基类数组无法使用多态的原因是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。原因:数组的分配是采用:首地址+偏移量的方式,
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
互联网科技公司经营范围
互联网的科技
科技与互联网发展
汇久创客互联网科技
苏州大垚互联网科技
科技伦理 互联网公司
互联网科技股午盘股票涨跌
衡水科技产业互联网平台
济南和联互联网科技有限公司
安控科技rtu产品工业互联网
茂名市互联网科技产业园
链环科技传统企业怎么转型互联网
银川新华互联网科技学校联系电话
上海京穆互联网科技有限公司
广州千川互联网科技有限公司
城市宝互联网科技有限公司
求路客互联网科技电话
互联网对科技影响
互联网领先科技成果宣传视频
颐高云石互联网科技
手冲咖啡和咖啡机区别
互联网科技
为想互联网科技
科技与互联网哪个更好
全球顶尖互联网科技公司
佛山市翊博互联网络科技有限公司
小米互联网科技园入驻
广东鹅鹅鹅互联网科技有限公司
福仕德教育科技互联网
恒生科技指数 中概互联网