是否可以创建接受类对象作为参数"parent"类"child"方法?



我想做的是这样的:

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...

在线演示

相关内容

最新更新