在层次结构中创建类的指针数组
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]->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;
【讨论】:
以上是关于在层次结构中创建类的指针数组的主要内容,如果未能解决你的问题,请参考以下文章