Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 初始化一个类中的指针数组并在另一个类中检索它_C++_Arrays_Pointers_Inheritance_Polymorphism - Fatal编程技术网

C++ 初始化一个类中的指针数组并在另一个类中检索它

C++ 初始化一个类中的指针数组并在另一个类中检索它,c++,arrays,pointers,inheritance,polymorphism,C++,Arrays,Pointers,Inheritance,Polymorphism,我想初始化文件array.cpp中的指针数组,并在不同的main.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

我想初始化文件
array.cpp
中的指针数组,并在不同的
main.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!"
}

我现在有六个头/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!"
}

如果我想在另一个文件中初始化它,比如说
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

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

只需使用
std::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;
}
类数组
{
公众:
数组(){}
std::vector get_数组();
};
std::vector数组::get_数组(){
返回{new ChildA(),new ChildB(),new Child()};
}
int main()
{
阵列a;
std::vector res=a.get_array();
res[0]->sayHi();
res[1]->sayHi();
res[2]->sayHi();
返回0;
}

OT:注意:
Parent*children[3]={new ChildA(),new ChildB(),new ChildA()}
是非常不安全的异常。我想补充一点,唯一指针的向量可能更合适。谢谢。是否可以通过res[0]->sayHi()访问sayHi()?@DanielLangr您是对的。但是Q没有用C++11进行标记。@Gupta也没有用C++98/03进行标记。现在,我相信C++11更为常见。但那张便条更多的是写给OP.@DanielLangr哦,我的错。感谢您对标签的引用。我几乎没有遇到过C++98或C++03标记的问题。是的,我认为最好把C++ 11作为C++ C++中所有C++问题的基本标准。