Перегрузка оператора c ++ - PullRequest
0 голосов
/ 10 марта 2020

Мне нужно перегрузить этот оператор (mainMenu - это тип класса с именем 'Menu'):

if (mainMenu) {
    cout << "The mainMenu is valid and usable." << endl;
}

Я пробовал это, но это не сработало:

bool operator!(const Menu& lobj);

1 Ответ

7 голосов
/ 10 марта 2020

В условии этого оператора if

if (mainMenu)

логический оператор отрицания ! не используется.

Вместо этого вы можете написать, например,

if ( !!mainMenu )

Однако лучше объявить явный оператор преобразования, такой как

explicit operator bool() const;

В этом случае вы можете написать

if (mainMenu)

Вот демонстрационная программа, которая показывает разницу между этими операторами.

#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;
} 

Вывод программы:

Hello
World!
...