返回对象的c++函数

C++ functions that return objects

本文关键字:函数 c++ 对象 返回      更新时间:2023-10-16

如何编写一个函数

每次返回一个不同类的对象

取决于它的参数?

交货

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仍然是实验性的,所以它可能不会被你的编译器实现。