【问题标题】:Inheitance not working while workig with pointer [duplicate]使用指针时继承不起作用[重复]
【发布时间】:2013-04-24 10:41:05
【问题描述】:

虽然我们正在打印bval,但输出也显示了dval 的值。编译器使用什么实际逻辑?我的预期输出是00000 00000,但我得到的输出是00000 01010

#include <iostream>
using namespace std;

class base {
 public:
   int bval;
   base() { bval = 0; }
};

class deri : public base {
  public:
    int dval;
    deri() { dval = 1; }
 };

 void SomeFunc(base *arr , int size) {
   for(int i = 0; i < size; i++, arr++)
     cout << arr-> bval;
   cout<<endl;
 }

 int main() {
   base BaseArr[5];
   SomeFunc(BaseArr, 5);
   deri DeriArr[5];
   SomeFunc(DeriArr, 5);
   return 0;
 }

【问题讨论】:

标签: c++ pointers inheritance


【解决方案1】:

您正在欺骗系统,并获得“切片”。

由于deri 大于base,所以当您执行arr++ 时,指针只会向前推进一个base 对象。

解决方案是有一个指针数组,并传递一个base **arr,如下所示:

base *foo[5];
base BaseArr[5];
SomeFunc(BaseArr,5);
for(int i = 0; i < 5; i++)
{ 
   foo[i] = &BaseArr[i];
}
SomeFunc(foo, 5);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 2016-08-15
    • 2013-06-13
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多