c++ - 使用指针时继承不起作用

标签 c++ pointers inheritance

<分区>

虽然我们正在打印 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;
 }

最佳答案

你在欺骗系统,并得到“切片”。

因为 deribase 大,当你做 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);

关于c++ - 使用指针时继承不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16189867/

相关文章:

c++ - 如何更改 C 函数中参数的地址?

c++ - 未优化表达式模板实现

c++ - 使用 Void* 指针的链表

swift - 协议(protocol)子类实现

c# - 如果一个结构不能继承另一个类或结构,为什么 Int32 有 ToString() 方法?

c++ - 复制抽象基类的子类

c - C 中的字符串指针覆盖现有指针

C++ 继承函数指针,可与仅派生方法一起使用

c++ - std::shared_ptr 类工厂 C++

c++ - 使用 boost::accumulators 对值之间的增量进行采样