2016-09-22 74 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;