【问题标题】:Creating an array of pointers of classes in an hierarchy在层次结构中创建类的指针数组
【发布时间】:2021-12-31 14:27:36
【问题描述】:

我有这个类的层次结构:

B1   B2
 \   /
   C

我应该如何在 C++ 中创建一个指针数组,我可以在其中存储所有类的对象? 这是我尝试过但不起作用的方法:

#include <iostream>

using namespace std;
class MyClass {
  public:
    void myFunction() {
      cout << "Some content in parent class." ;
    }
};

class MyOtherClass {
  public:
    void myOtherFunction() {
      cout << "Some content in another class." ;
    }
};

class MyChildClass: public MyClass, public MyOtherClass {
};

int main() {
  MyChildClass **v=new MyChildClass*[3];
  v[1]=new MyClass();
  v[2]=new MyOtherClass();
  v[1]->myFunction();
  return 0;
}

【问题讨论】:

  • 你的问题不太清楚,请阅读stackoverflow.com/help/how-to-ask
  • 您的观点是什么,它可以帮助我们了解您想要做什么
  • 不小心做了v[1]=new MyClass(); v[1]-&gt;myOtherFunction();,你想怎么办?
  • 不可能将指向多个类型的指针存储在同一个数组中,除非它们都有一个共同的 base 类。拥有一个通用的派生类并没有帮助。

标签: c++ arrays class pointers


【解决方案1】:

首先,您必须了解,您只能将指向子级的指针存储到指向父级的指针中,并且只能按该顺序存储。其次,您可能想使用std::variant,因此您的代码将如下所示

#include <iostream>
#include <variant>

using namespace std;
class MyClass {
  public:
    void myFunction() {
      cout << "Some content in parent class." ;
    }
};

class MyOtherClass {
  public:
    void myOtherFunction() {
      cout << "Some content in another class." ;
    }
};

class MyChildClass: public MyClass, public MyOtherClass {
};

int main() {
    std::variant<MyClass*, MyOtherClass*> v[3];
    v[1]=new MyClass();
    v[2]=new MyOtherClass();

    std::get<MyClass*>(v[1])->myFunction();
    std::get<MyOtherClass*>(v[2])->myOtherFunction();
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 2017-05-04
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多