2016-09-22 4 views
1

C++を完全に新しくしました。クラスやオブジェクトを理解しようとすると、これまでのところ、基本についてはそれほど複雑ではないので、私はその要点を理解しています。しかし、私が書いたこのコードは意図したとおりに動作していません。多少は機能しますが、ユーザーの入力を2回尋ねます。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」と入力するとすぐに「はい」が返されます。しかし、何かを入力すると、もう一度何かを入力するように促し、if/elseは入力したものに応じて動作します。

+1

をし、他のあなたの入力どちらかといえば、あなたのコードは 'object.getName()'を呼び出します:

ただ、ローカル変数に値を格納し、if文の前にgetName()を呼び出し、その後、代わりにそのテスト2回目。あなたのためのポップクイズ: 'object.getName()'は何をしますか? –

+0

「John」と入力すれば、それは一度しか印刷されません...考えられる食べ物 – qxz

+0

[純粋な](https://en.wikipedia.org/wiki/Pure_function)と不純な機能についての記事面白いと思う。 – Sergey

答えて

3

object.GetName()を2回入力すると、入力が2回要求されます。この関数の結果を変数に格納し、それをif文で使用します。 ||最初の式が真の場合、ステートメントは短絡されます。これにより、最初の呼び出しがtrueの場合に2番目の呼び出しが実行されなくなります。 getName()入力するたびにを求めているためである

2

だから、Xを求めて初めて、もしXイマイチジョンそれは、入力およびテストを取得する次のテストに進みに対するものx =クリス。これにそれを変更する

試してみてください。

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

} 
else { 
    cout << "No"; 
} 

} 

希望文が効果的と評価された場合に

+0

良いキャッチ、私の悪い –

0

あなたの現在のに役立ちます:John続いChrisを入力してみてください、あなたがNoを取得する必要があります

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

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