Понимание оператора bool == (параметр 1, параметр 2) - PullRequest
1 голос
/ 23 января 2020

bool operator==(str_array a, str_array b)

Где str_array - структура для моего назначения. Что означает это обозначение, как это нужно учитывать при реализации функции, и как я вызываю ее, когда я закончу (так же, как обычные вызовы функций?)

Впервые видя эту запись. Реализация представляет собой простое сравнение между двумя str_array переменными (я знаю, как реализовать это без странных обозначений)

Ответы [ 4 ]

2 голосов
/ 23 января 2020

Как мне позвонить, когда я закончу?

Поскольку вы определили оператор , тогда он называется , а не как «нормальная» функция! Скорее, его можно использовать как обычный оператор:

str_array sa1;
str_array sa2;
//.. some code
if (sa1 == sa2) { // Here, you are calling the == OPERATOR that you've defined
    //.. do something
}

Реализация будет, однако, выглядеть как нормальная функция:

bool operator==(str_array a, str_array b) {
    bool answer;
    //..
    // some code that sets "answer" according to the (in)equality of a and b
    //
    return answer;
}
1 голос
/ 23 января 2020

Когда вы делаете что-то вроде (где a и b - str_array)

if (a == b) { // ...

Эта функция будет вызвана.

operator== - это имя функции, которая вызывает ==. Вы должны вернуть true, если аргументы равны.

0 голосов
/ 23 января 2020

Эта функция

bool operator==(str_array a, str_array b);

вводит перегруженный оператор равенства (operator ==) для объектов типа str_array.

, поэтому вы можете сравнивать объекты типа twp так, как вы сделать с фундаментальными типами, как, например,

if ( a == b ) { /* do something */ } 

Компилятор заменит выражение a == b для вызова перегруженной operator == (функция).

Вот демонстрационная программа с два перегруженных оператора: operator == и operator <<.

#include <iostream>
#include <iomanip>

class A
{
public:
    explicit A( int x = 0 ) : x( x ) {}

    friend bool operator ==( const A &a1, const A &a2 )
    {
        return a1.x == a2.x;
    }

    friend std::ostream & operator <<( std::ostream &os, const A &a )
    {
        return os << a.x;
    }

private:
    int x;
};

int main() 
{
    A a1( 10 ), a2( 10 ), a3( 20 );

    std::cout << "a1 = " << a1 << '\n';
    std::cout << "a2 = " << a2 << '\n';
    std::cout << "a3 = " << a3 << '\n';

    std::cout << "a1 == a2 is " << std::boolalpha << ( a1 == a2 ) << '\n';
    std::cout << "a2 == a3 is " << std::boolalpha << ( a2 == a3 ) << '\n';
    std::cout << "a1 == a2 is " << std::boolalpha << operator ==( a1, a2 ) << '\n';

    return 0;
}

Его вывод

a1 = 10
a2 = 10
a3 = 20
a1 == a2 is true
a2 == a3 is false
a1 == a2 is true
0 голосов
/ 23 января 2020

Это перегрузка оператора . Вы создаете перегрузку оператора ==, который принимает объект str_array по обе стороны от оператора:

str_array a1;
str_array a2;
...
if (a1 == a2)
    do_something();
...