2016-12-27 44 views
0

所以基本上我剛剛用我的一個類方法(函數)中使用cout/cin的簡單代碼編寫了我的程序。我知道這很糟糕,不應該這樣做,我應該如何切換它們?在我的課程中,我應該怎樣改變cout/cin的東西?

例如,現在我有班人類。它有一些領域(變量),如性別,身高,年齡。

我有一個名爲的getInfo()方法,它基本上是一個很大的

cout << "Whats your age?" << endl; 
cin >> age; 

等。我應該怎樣改變它們?我應該使用類似的東西

ostream& operator<<(ostream &o, const Human &s) 
istream& operator>>(istream &i, Human &s) 

我有這些功能寫下來,但他們基本只是toString或不?

我應該用什麼toString? (需要toString - 我的項目thingy任務)。

+0

重載操作符的行爲將類似於getInfo()和toString方法?爲什麼你只需要詢問方法和cin/cout的信息就行了? –

+0

那麼,toString()方法通常用於在字符串中格式化和顯示輸出。您可以在其中使用超載的運營商'<<' and '>>'。 –

+0

答案取決於您真正需要(或已被要求)做的事情......我將首先「解耦」包含數據的類(人類)以及從用戶獲取數據的方式並將其分配給人類對象。 toString()方法可能只是將人類信息(年齡,名稱,...)格式化爲一個std :: string,可以輸出到人類之外的某個地方(請注意,在我看來,這真的很難看C++,提供運算符<<(std :: ostream&) – roalz

回答

2

您可以getInfo通用輸入和輸出流,例如:

void Human::getInfo(std::istream& input, std::ostream& output) { 
    output << "What's your age?" << std::endl; 
    input >> age; 
    // etc. 
} 

toString S鍵通常會返回對象的字符串表示,所以它可能是這個樣子:

std::string Human::toString() const { 
    std::string string; 
    string += "Human(\n"; 
    string += " age: " + std::to_string(age) + "\n"; 
    // etc. 
    string += ")"; 
    return string; 
} 
相關問題