2012-04-12 136 views
2

讓我們假設有:類 - 獲取函數 - 返回多個值

Class Foo{ 
    int x,y; 

    int setFoo(); 
} 

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

所有我想要實現的是形成我get函數返回多個值。我怎樣才能做到這一點?

+0

'std :: pair ' – 2012-04-12 20:58:47

回答

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',它應該返回我從我的類對象的值是否有一個聰明的方法呢? – 2012-04-12 19:59:17

+0

@BogdanMaier是的,看到編輯答案。 – 2012-04-12 20:01:33

6

你可以參考參數。

void Foo::setFoo(int &x, int &y){ 
    x = 1; y =27 ; 
} 
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); 
1

C++不允許您返回多個值。你可以返回一個包含多個值的類型。但是你只能從C++函數返回一個類型。

例如:

struct Point { int x; int y; }; 

Class Foo{ 
    Point pt; 

    Point setFoo(); 
}; 

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

在C你真的不能返回多個值++。但是你可以參考

3

您不能返回多個對象本身修改多個值,但你可以做的是請使用std::pair<utility>std::tuple<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; 
}