2013-12-23 86 views
1

好的改變私有變量,我編碼的東西的樂趣,但這裏的問題:我有,我想改變一個私有變量類如何通過閱讀文本文件

,但我想要將其更改爲從文本文件中讀取的行。除了創建一個單獨的字符串來獲取文本文件,然後使用成員函數來更改私有變量,沒有別的辦法嗎?

這是我在這裏的第一個問題,所以告訴我,如果我需要澄清的事情

+1

您希望能夠用該類的私有字符串變量做什麼? – DavidO

+0

你可以使用變量作爲從文件中讀取的'fread'函數的目的地 – nrathaus

+1

私有變量可以使用成員函數讀寫,所以如果你不想創建一個新變量,你必須編寫一個類級函數讀取文件並在私有變量中存儲所需的值 –

回答

0

如何改變這種變量在任何成員函數?

成員函數將有權編輯其私有成員變量。

1

私人成員被設計爲使用該類的公共方法進行操縱。如果你不需要對它們進行任何複雜的操作,創建getter和setter就可以了 - 只讀或寫私有變量的方法(也可能檢查值等)。

#include <string> 

class A 
{ 
private: 
    std::string privateString; 

public: 
    std::string getPrivateString() const { return privateString; } 
    void setPrivateString(const std::string& newString) { privateString = newString; } 
}; 

如果你的類應該處理文件,你可以創建一個公共的方法來讀取文件中的行,並直接存儲到私有成員。

+1

請注意@Melebius爲其getter和setter方法使用了傳值語義。根據您的編譯器,這可以提供一個很好的性能提升(請參閱[想要速度?按值傳遞]。(http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/ ))。根據類A的用法,您可以選擇使用傳遞引用,在這種情況下,您應該適當地放置const限定詞,以避免類的用戶無意中修改內容,例如, 'const std :: string&getPrivateString()const'和'void setPrivateString(const std :: string&newString)'。 – Rob

+0

如果我可以nitpic,你會介意在getPrivateString()的定義之後放置一個const?謝謝。 – Rob

+0

@Rob好的,我在我的示例中添加了引用和const限定符,儘管我的初衷是編寫最小但有效的代碼。但是,我仍然保留'getPrivateString()'方法返回值,因爲您可以使用更少的限制來處理它。甚至可能有兩個吸氣者在一起。 – Melebius