我想做的是这样的:
class Parent{
.....
....
public:
Child* func();
};
Child* Parent::func()
{
Child C[] = {.....,....,...};
return C;
}
class Child : Parent{....};
请原谅我在这里完全无视<阵列。>
您可以在func()
声明中使用之前向前声明Child
。 这仅适用于指针和引用。 然后,您需要完全定义Child
的外观,然后才能在func()
的定义中创建Child
实例,然后您可以根据需要返回Child*
指针。
请注意,返回指向局部变量的指针将导致未定义的行为,因为当函数退出时变量会被销毁,使返回的指针悬而未决,指向现在无效的内存。 相反,您应该返回Child*
指针的std::vector
,例如:
#include <vector>
class Child;
class Parent{
...
public:
std::vector<Child*> func();
};
class Child : public Parent{ ... };
std::vector<Child*> Parent::func()
{
std::vector<Child*> C;
C.push_back(new Child(...));
C.push_back(new Child(...));
C.push_back(new Child(...));
return C;
}
Parent p;
std::vector<Child*> vec = p.func();
// use vec as needed...
for(size_t i = 0; i < vec.size(); ++i) {
delete vec[i]; // destroy each Child when done using it
}
或者更好的是,改用智能指针,让编译器为您处理清理:
#include <vector>
class Child;
class Parent{
...
public:
std::vector<std::unique_ptr<Child>> func();
};
class Child : public Parent{ ... };
std::vector<std::unique_ptr<Child>> Parent::func()
{
std::vector<std::unique_ptr<Child>> C;
C.push_back(std::make_unique<Child>(...));
C.push_back(std::make_unique<Child>(...));
C.push_back(std::make_unique<Child>(...));
return C;
}
Parent p;
auto vec = p.func();
// use vec as needed...
在线演示