运算符重载 C++

0 c++ overloading operator-keyword

我需要重载这个运算符(mainMenu 是名为“Menu”的类类型):

if (mainMenu) {
    cout << "The mainMenu is valid and usable." << endl;
}
Run Code Online (Sandbox Code Playgroud)

我试过这个,但没有用:

bool operator!(const Menu& lobj);
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 7

在这个 if 语句的条件下

if (mainMenu)
Run Code Online (Sandbox Code Playgroud)

!不使用逻辑否定运算符。

相反,您可以编写例如

if ( !!mainMenu )
Run Code Online (Sandbox Code Playgroud)

但是最好声明一个显式转换运算符,如

explicit operator bool() const;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,你可以写

if (mainMenu)
Run Code Online (Sandbox Code Playgroud)

这是一个演示程序,显示了这些运算符之间的区别。

#include <iostream>

struct A
{
    bool operator !() const
    {
        return false;
    }

    explicit operator bool() const
    {
        return true;
    }
};

int main() 
{
    if ( !!A() ) std::cout << "Hello\n";

    if ( A() ) std::cout << "World!\n";

    return 0;
} 
Run Code Online (Sandbox Code Playgroud)

程序输出是

Hello
World!
Run Code Online (Sandbox Code Playgroud)