首页 > 解决方案 > 初始化一个类中的指针数组并在另一个类中检索它

问题描述

我想在一个文件中初始化一个指针数组,array.cpp然后在不同的main.cpp.

我现在有六个 headers/src 文件:parent.h/cpp, childA.h/cpp, childB.h/cpp.

class Parent(){
public:
    Parent();
    virtual void sayHi() = 0;
};

Parent::Parent() {}

class ChildA : Parent{
public:
    ChildA()
    void sayHi();

ChildA::ChildA()
void ChildA::sayHi(){
    std::cout << "Hello A!"
}

class ChildB : Parent{
public:
    ChildB()
    void sayHi();

ChildB::ChildB()
void ChildB::sayHi(){
    std::cout << "Hello B!"
}

我了解如何创建一个包含ChildA()ChildB()main.cpp类中的指针数组:

Parent *children[3] = {new ChildA(), new ChildB(), new ChildA()}

如果我想在一个不同的文件中初始化它,比如说array.cpp,并从中检索它main.cpp怎么办?

我的想法(不工作)

我的粗略想法是在内部创建一个定义类array.h/cpp,如下所示:

class Array(){
    Array();
    Parent *get_array();    // I don't know how to define it as an array of pointers
}
Array::Array()

Parent *Array::get_array() {
    Parent *array[] = { new ChildA(), new ChildB(), new Child() };
    return *array;
}

并在main.cpp

Array array;
Parent *children[] = array.get_array();    // It cannot be initialized like this

这不起作用,我不知道如何从这里开始。

标签: c++arrayspointersinheritancepolymorphism

解决方案


只需使用 astd::vector而不是 C 数组:

class Array
{
public:
   Array() {}
   std::vector<Parent*> get_array();   
};

std::vector<Parent*> Array::get_array() {
   return { new ChildA(), new ChildB(), new Child() };
}

int main()
{
   Array a;
   std::vector<Parent*> res = a.get_array();

   res[0]->sayHi();
   res[1]->sayHi();
   res[2]->sayHi();

   return 0;
}

推荐阅读