2016-09-22 76 views
1

完全是C++的新手。試圖理解類和對象,到目前爲止我已經掌握了它的要點,因爲對於非常基礎的東西來說它沒有太複雜。但是,我寫的這段代碼並沒有按照預期工作。它有點工作,但它要求用戶輸入兩次。C++中的類/對象的邏輯運算符

#include <iostream> 
#include <string> 
using namespace std; 

class FooFoo { 
public : 

string GetName() { 
    cin >> name; 
    return name; 
} 

private: 
    string name; 
}; 

int main() 
{ 
FooFoo object; 
if (object.GetName() == "John" || object.GetName() == "Chris") 
{ 
    cout << "Yes"; 

} 
else { 
    cout << "No"; 
} 

} 

如果我輸入「John」,它會立刻返回yes。但是,當我輸入其他內容時,它會提示我再次輸入內容,然後if/else根據我輸入的內容執行相應操作。

+1

如果你輸入任何東西,你的代碼將調用'object.getName()'一第二次。爲你彈出測驗:'object.getName()'做了什麼? –

+0

我敢打賭,如果你輸入'John',它只會打印一次......思考的食物 – qxz

+0

也許關於[純](https://en.wikipedia.org/wiki/Pure_function)和不純功能的文章會對你有意思。 – Sergey

回答

3

您可以撥打object.GetName()兩次,這會導致輸入被詢問兩次。將此函數的結果存儲到一個變量中,並在if語句中使用該變量。 ||如果第一個表達式爲真,則語句會短路。如果第一個爲真,這導致第二個調用不被執行。

2

這是因爲的GetName()是要求每一次輸入,

所以第一次是要求X,如果x心不是約翰它進入下一個測試,然後把它輸入和測試,對x =克里斯。

嘗試更改爲此:

int main() 
{ 
FooFoo object; 
string test = object.GetName() 
if (test == "John" || test == "Chris") 
{ 
    cout << "Yes"; 

} 
else { 
    cout << "No"; 
} 

} 

希望幫助

+0

好,我的壞 –

0

您當前的if語句有效的計算結果爲:

if (object.GetName() == "John") 
    cout << "Yes"; 
else if (object.GetName() == "Chris") 
    cout << "Yes"; 
else 
    cout << "No"; 

嘗試輸入Chris其次John,你應該得到No

if語句之前就叫getName(),存儲在本地變量中的值,然後測試來代替:

string name = object.GetName(); 
if (name == "John" || name == "Chris") 
    cout << "Yes"; 
else 
    cout << "No;