2012-04-12 2 views
2

이의 우리가 있다고 가정하자 하나 개 이상의 값을 반환 - 기능을 가져옵니다. 어떻게해야합니까?클래스 -

+0

'std :: pair ' –

답변

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; } 
}; 
+0

만약 내가'get function '을 사용하고 싶다면 클래스 객체의 값을 리턴해야한다. –

+0

@BogdanMaier 예, 수정 된 답변 참조. –

6

당신은 참조 매개 변수를 가질 수 있습니다.

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); 
1

C++에서는 여러 값을 반환 할 수 없습니다. 여러 값이 포함 된 유형을 반환 할 수 있습니다. 그러나 C++ 함수에서 한 가지 유형 만 반환 할 수 있습니다. 예를 들어

:

struct Point { int x; int y; }; 

Class Foo{ 
    Point pt; 

    Point setFoo(); 
}; 

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

당신은 정말 C에서 여러 값을 반환 할 수 없습니다 ++. 하지만 당신은 객체 자체

3
당신은 반환 할 수 없습니다

하나 이상의 참조로 여러 값을 수정할 수 있지만 당신이 할 수있는 일은 <tuple>에서 <utility>에서 std::pair 또는 std::tuple (후자의 최신 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; 
} 
1

당신은 그 이상이 개 반환 변수와 std::tuple (C++ 11 만)에 대한 std::pair를 사용할 수 있습니다.