如何编写
的函数每次都返回一个不同类的对象
取决于其参数?
离
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;}};
答案 0 :(得分:3)
我假设您正在寻求利用多态性。
您的函数需要返回指向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
应该有一个虚拟析构函数,以便正确清理。
答案 1 :(得分:1)
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
仍然是实验性的,因此编译器可能无法实现。