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++问题的基本标准。