[英]C++ functions that return objects
我该如何编写一个函数
每次返回不同类别的对象
根据其参数?
前
class pet{....};
class cat:public pet {.....};
class dog:public pet {.....};
cat_or_dog make pet (int a){
if (a) { cat b; return b;}
else { dog b; return b;}};
我假设您正在寻求利用多态性。
您的函数将需要返回一个指向pet
的指针,最好是一个像std::unique_ptr<pet>
这样的智能指针:
#include <memory>
class pet{
public:
virtual ~pet(){};
};
class cat:public pet {};
class dog:public pet {};
std::unique_ptr<pet> makePet(int a){
if (a)
return std::unique_ptr<pet>(new cat);
else
return std::unique_ptr<pet>(new dog);
}
int main() {
auto pet = makePet(2);
}
而且您的pet
应该有一个虚拟的析构函数以便正确清理。
如果您的类都继承自同一基类,则@Chris Drew的答案有效。 但是,如果没有,则还有另一种选择。 您可以使用std::optional
可选地返回一个对象。 你可以这样使用
std::pair<std::optional<cat>, std::optional<dog>> makePet(int a)
{
std::pair<std::optional<cat>, std::optional<dog>> pet;
if(a)
pet.first = cat();
else
pet.second = dog();
return pet;
}
然后,您可以通过检查像这样的配对中的std::optional
来检查哪个宠物在那里
std::pair<std::optional<cat>, std::optional<dog>> pet = makePet(i);
if (pet.first)
{
//Do things with cat
}
else
{
//Do things with dog
}
请注意,尽管std::optional
仍处于实验阶段,因此您的编译器可能未实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.