C++中基类数组无法使用多态的原因是什么
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,C++中基类数组无法使用多态的原因是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。原因:数组的分配是采用:首地址+偏移量的方式,
千家信息网最后更新 2024年11月11日C++中基类数组无法使用多态的原因是什么
C++中基类数组无法使用多态的原因是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
原因:
数组的分配是采用:首地址+偏移量的方式,而偏移量是固定大小的,例如:Node arry[10];
arry[i] 的地址:&arry[0]+i*sizeof(Node);
当Node是含有虚函数的基类的时候,arry[]中保存的都是基类Node的元素,因为数组的取值方式便是固定偏移量的,一旦数组中存储的是继承类的话,那么这个数组的取值方式,会导致出现不可见的错误。(备注:通常情况下会认为这个元素是基类)。
例子:
#include
using 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安全错误
数据库的锁怎样保障安全
做一个病毒软件开发
新时代网络安全
实际存储在数据库中的表
长沙市雨花区网络安全保卫大队
联通网络安全心得
滨海新区网络安全企业与政策
手机app软件开发作品
数据库删除多个表
用户信息插入数据库
lvs为什么叫虚拟服务器
毕业数据库文献
数据库系统论文含代码
互贯网络技术
网络安全域边界
数据库java框架
广东燥起来互联网科技有限公司
比亚迪做软件开发怎么样
tbc祈福服务器金价多少
数据库技术及应用vf
斗破乾坤服务器列表
南宫市网络安全和信息化委员会
厦门简单的项目管控软件开发平台
壁虎网络安全
网络安全与执法专业不当警察
服务器装系统2019
服务器托管公司有权吗
成都web前端软件开发定制
学校网络技术部面试题目
马蹄服务器管理如何安装软件
嘉定区软件开发服务电话