2010-04-17 160 views
2

我有一個有對象向量的類。我需要做什麼才能返回其中一個對象並在課堂外進行更改,以保持更改?是否有可能與常規指針?有沒有標準的程序? (是的,我的背景是在Java中。)C++返回對象

+0

你指的是stl向量?請提供您想要的僞代碼示例。 – sramij 2015-02-23 07:20:10

回答

0

如果你有std :: vector,其中A是你的類,你可以返回一個std :: vector :: iterator。

class A { 
    public: int a; 
}; 

std::vector<A> v = ...; 
std::vector<A>::iterator it = v.begin(); // access to the first element 
it = v.begin() + 5; // access to the 5-th element (vector can do random access) 
// 'it' can now be used elsewhere 
it->a = 0; // changes are reflected in the object inside the vector 
*it = A(); // changes the object hold by the vector 

請注意,如果矢量改變,那麼迭代器可能失效!

1

如果矢量持有指向對象的指針,則從矢量(或更準確地說指向的對象)返回的對象之一的任何更改都會影響矢量中的實例。

4

你的問題是有點模糊,但這裏有一個例子:

class foo 
{ 
public: 
    foo() 
    { 
     vec.resize(100); 
    } 

    // normally would be operator[] 
    int& get(size_t pIndex) 
    { // the return type is a reference. think of it as an alias 
     return vec[pIndex]; // now the return value is an alias to this value 
    } 

private: 
    std::vector<int> vec; 
}; 

foo f; 
f.get(10) = 5; 
// f.get(10) returned an alias to f.vec[10], so this is equivalent to 
// f.vec[10] = 5 

的常見問題有一個很好的section on references

此外,如果您是C++新手,請不要嘗試使用在線資源進行學習。如果你還沒有一本書,you should,他們確實是學習這門語言的唯一好方法。

+0

+1,但您可能想要顯示vec的聲明以增加清晰度。 – Cam 2010-04-17 17:50:58

+0

@incrediman:除非我誤解,否則它在班級的私人部分。 – GManNickG 2010-04-17 17:54:56

+2

您應該強調有關返回參考的詳細信息。對於剛接觸這門語言的人來說,這可能並不明顯,這是「魔術」。 – 2010-04-17 17:59:28

0

您需要將參考指針返回給對象。

type &getref(); // "type &" is a reference 
type *getptr(); // "type *" is a pointer 

調用者將有權訪問基礎對象。

但是,你需要確保對象不移動(如果一個向量必須增長的話,它可能會產生)。你可能想考慮使用std :: list來代替。