2014-12-03 70 views
-2

我有一個私有和公共成員的類我正嘗試使用Getter()來訪問私人字成員。這一切都編譯,但是當從dir[NORTH].Get_Words() = "NORTH";的值每當這個詞只是一個沒有Get_Words()成員函數的公共函數使用dir[NORTh].word = "NORTH"; 爲什麼Get_Words不正確地將值分配給單詞?C++通過getter獲得私有價值

class Words 
{ 
    public: 
    static void Set_Words(); 
    string Get_Words(); 
    private: 
    string word; 
} 

string Word::Get_Words() 
{ 
    return word; 
} 

... 
dir[NORTH].Get_Word() = "NORTH"; 

,我也試過

dir[NORTH].Get_Word() = Set_Word(string "North"); 

我敢肯定,我做了錯誤的二傳手,但我是新來的對象在C++面向對象程序設計,並不能找出做到這一點的最好辦法。

+0

,因爲你需要一個公共的setter方法,以及... getter方法只能得到沒有設置 – 2014-12-03 21:56:25

+0

對不起,我忘了補充一點,我也嘗試了一個setter方法,但不能正確實現。我還會嘗試更新setter代碼。 – mikeLspohn 2014-12-03 21:57:12

+0

我注意到你聲明瞭'Get_Words',但叫做'Get_Word' ...你想讓它成爲單詞還是單詞?如果你要用數組來管理多個單詞,請看看 – 2014-12-03 22:01:31

回答

2

std::string Get_Word()按值返回,也就是它複製單詞並返回它。當您嘗試分配給它時,您正試圖分配給右手參考,這是不可能的。

圍繞這將爲一個參考返回字道:

std::string& Get_Word(); 

但通常被認爲是不好的做法爲基準可以活得比類。更好的方法是提供沿側的二傳手,吸氣:

void Set_Word(const std::string& w) {word=w;} 

甚至更​​好:

template <typename T> 
void Set_Word(T&& w) {word=std::foreward<T>(w);} 
+0

謝謝你的解釋 – mikeLspohn 2014-12-03 22:11:44

0

爲了獲得私人價值,通常實現公共獲取功能。

你要設置的值 - 通常是一個公共組函數完成這個任務實現的:

void Set_Word(string& newValue) { ... } 

或實現吸氣劑返回一個參考,因爲弗拉德從莫斯科說。