在层次结构中创建类的指针数组

Posted

技术标签:

【中文标题】在层次结构中创建类的指针数组【英文标题】: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;

【问题讨论】:

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

【讨论】:

以上是关于在层次结构中创建类的指针数组的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中的类中创建类对象的动态数组

C 语言结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )

在函数中创建值,然后将指针保存在全局指针数组中的值上

结构体指针数组和结构体数组指针的区别

具有纯虚函数的父类的指针数组和指针数组的对象类型

C++结构体指针数组如何分配空间,用new