2

私たちが持っているとしましょう:

Class Foo{
    int x,y;

    int setFoo();
}

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

私が達成したいのは、get 関数から複数の値を返すことだけです。これどうやってするの?

4

7 に答える 7

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; }
};
于 2012-04-12T19:54:25.677 に答える
6

参照パラメーターを持つことができます。

void Foo::setFoo(int &x, int &y){
    x = 1; y =27 ;
}
于 2012-04-12T19:54:38.347 に答える
3

それ自体で複数のオブジェクトを返すことはできませんが、std::pairfrom<utility>またはstd::tuplefrom <tuple>(後者は最新の C++ 標準でのみ使用可能) を使用して、複数の値をまとめて 1 つのオブジェクトとして返すことができます。

#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;
}
于 2012-04-12T19:57:48.747 に答える
2

C++ では、実際には複数の値を返すことはできません。ただし、参照によって複数の値を変更できます

于 2012-04-12T19:57:41.390 に答える
1

std::pair2 つの返された変数とstd::tuple(C++11 のみ) より多くの変数に使用できます。

于 2012-04-12T20:01:55.647 に答える
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);
于 2012-04-12T19:54:49.470 に答える
1

C++ では、複数の値を返すことはできません。複数の値を含む型を返すことができます。ただし、C++ 関数から返せる型は 1 つだけです。

例えば:

struct Point { int x; int y; };

Class Foo{
    Point pt;

    Point setFoo();
};

Point Foo::setFoo(){
    return pt;
}
于 2012-04-12T19:56:08.437 に答える