类 - 获取函数 - 返回多个值

时间:2012-04-12 19:52:59

标签: c++ class return-value

我们假设有:

Class Foo{
    int x,y;

    int setFoo();
}

int Foo::setFoo(){
    return x,y;
}

我想要实现的只是形成我的get函数来返回多个值。我怎么能这样做?

7 个答案:

答案 0 :(得分:10)

C ++不支持多个返回值。

您可以通过参数返回或创建辅助结构:

class Foo{
    int x,y;

    void setFoo(int& retX, int& retY);
};

void Foo::setFoo(int& retX, int& retY){
    retX = x;
    retY = y;
}

struct MyPair
{
   int x;
   int y;
};

class Foo{
    int x,y;

    MyPair setFoo();
};

MyPair Foo::setFoo(){
    MyPair ret;
    ret.x = x;
    ret.y = y;
    return ret;
}

另外,您的方法不应该被称为getFoo吗?只是说... ...

编辑:

你可能想要什么:

class Foo{
    int x,y;
    int getX() { return x; }
    int getY() { return y; }
};

答案 1 :(得分:6)

您可以拥有参考参数。

void Foo::setFoo(int &x, int &y){
    x = 1; y =27 ;
}

答案 2 :(得分:3)

您不能返回多个本身的对象,但您可以使用std::pair中的<utility>std::tuple中的<tuple> 1}}(后者仅在最新的C ++标准中可用)将多个值打包在一起并将它们作为一个对象返回。

#include <utility>
#include <iostream>

class Foo
{
  public:
    std::pair<int, int> get() const {
        return std::make_pair(x, y);
    }

  private:
    int x, y;
};

int main()
{
    Foo foo;
    std::pair<int, int> values = foo.get();

    std::cout << "x = " << values.first << std::endl;
    std::cout << "y = " << values.second << std::endl;

    return 0;
}

答案 3 :(得分:2)

你无法在c ++中真正返回多个值。但您可以通过引用

修改多个值

答案 4 :(得分:1)

您不能返回超过1个变量。 但你可以通过引用传递,并修改该变量。

// And you pass them by reference
// What you do in the function, the changes will be stored
// When the function return, your x and y will be updated with w/e you do.
void myFuncition(int &x, int &y)
{
    // Make changes to x and y.
    x = 30;
    y = 50;
}

// So make some variable, they can be anything (including class objects)
int x, y;
myFuncition(x, y);
// Now your x and y is 30, and 50 respectively when the function return
cout << x << " " << y << endl;

编辑:回答你关于如何获取的问题:你不是只返回1个变量,而是传递一些变量,所以你的函数可以修改它们(当它们返回时),你会得到它们。

// My gen function, it will "return x, y and z. You use it by giving it 3 
// variable and you modify them, and you will "get" your values.
void myGetFunction(int &x, int &y, int &z)
{
    x = 20;
    y = 30;
    z = 40;
}

int a, b, c;
// You will "get" your 3 value at the same time when they return.
myGetFunction(a, b, c);

答案 5 :(得分:1)

C ++不允许您返回多个值。您可以返回包含多个值的类型。但是你只能从C ++函数中返回一种类型。

例如:

struct Point { int x; int y; };

Class Foo{
    Point pt;

    Point setFoo();
};

Point Foo::setFoo(){
    return pt;
}

答案 6 :(得分:1)

您可以将std::pair用于两个返回的变量,并std::tuple(仅限C ++ 11)用于更多变量。