c++中带有类/对象的逻辑运算符

Logical operators with class/objects in C++

本文关键字:对象 逻辑运算符 c++      更新时间:2023-10-16

对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会根据我输入的内容进行相应的操作。

您调用object.GetName()两次,这会导致两次请求输入。将此函数的结果存储到一个变量中,并在if语句中使用该变量。如果第一个表达式为真,则||语句被短路。如果第一个调用为真,则导致第二个调用不被执行。

这是因为GetName()每次都要求输入,

所以它第一次请求x,如果x不是john,它就进入下一个测试,然后得到输入并根据x = chris进行测试。

试着改成:

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

希望有帮助

当前if语句的有效计算结果为:

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

试着输入ChrisJohn,你应该得到No

在if语句之前调用getName(),将值存储在一个局部变量中,然后测试:

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