c++ 父类指针问题
发布网友
发布时间:2022-08-15 04:56
我来回答
共2个回答
热心网友
时间:2023-09-12 12:28
因为,第二行调用foo函数的实参是子类数组首元素的地址,而foo函数的形参是基类指针,由于子类对象的大小是基类的2倍(基类只有bval,子类有bval和dval),所以在循环中执行arr++时,该指针就交替地指向bval和dval,于是就交替地输出0和1了。
热心网友
时间:2023-09-12 12:28
说实话,这题有点另(wu)类(liao)。
Deri类的内存布局是:
+------------+
| Base::bVal |
+------------+
| Deri::dVal |
+------------+
初始化后的内存数据就是两个整型数据(0,1)。
deriArr数组的内存布局就是连续的5个Deri类对象,初始化后的内存数据就是(0,1,0,1,0,1,0,1,0,1),10个整型数据。
foo 函数接受的是 Base 类指针,而调用时传递的 deriArr 指针,是 Deri 类型,按照 up casting 规则,编译器将把 Deri* 转换为 Base*,foo 就会把应该是 Deri 类对象数组的内存,当成 Base 类对象数组来处理了,而 Base 类只有1个整型数据,于是就输出了01010。