NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: pocet argumentů v operatoru

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
petr.dar
Člen
Avatar
petr.dar:25.2.2017 22:01

Ahoj lidi,
Nevěděli byjste, proč mi tento kód hází chybu, že operator == chce jen jeden argument?

#include <iostream>
using namespace std;
struct my_struct
{
    int X;
    int Y;
    friend bool operator ==(const my_struct &X, const my_struct &Y);
};


int main()
{
    my_struct first;
    my_struct second;
    if (first == second)
    {

    }
    return 0;
}

bool my_struct::operator ==(const my_struct &X, const my_struct &Y)
{
    return (X.X == X.Y && Y.X == Y.Y);
}
 
Odpovědět
25.2.2017 22:01
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na petr.dar
Martin Dráb:25.2.2017 22:12

Myslím, že jelikož jsi operátor definoval jako metodu struktury my_struct, tak se očekává, že operátor bude porovnávat zadaný objekt s this, takže pak by měla být deklarace operátoru jen s jedním parametrem:

bool my_struct::operator ==(const my_struct &X)
{
    return (this->X == X.X && this->Y == X.Y);
}

(upravil jsem jeho implementaci ,protože si nejsem jistý, zda-li ta tvoje opravdu dělá to, co chceš).

Pokud bys chtěl dvouargumentovou variantu operátoru, deklaruj jej jako globální funkci mimo strukturu my_struct.

Nahoru Odpovědět
25.2.2017 22:12
2 + 2 = 5 for extremely large values of 2
Avatar
petr.dar
Člen
Avatar
petr.dar:25.2.2017 22:26

potřebuji právě tu dvouargumentovou variantu operátoru, globální deklarace nic nezmění ...

 
Nahoru Odpovědět
25.2.2017 22:26
Avatar
petr.dar
Člen
Avatar
petr.dar:25.2.2017 22:41

No vlastně, v tomto případě mi to pomohlo, ale kdybych potřeboval např ve třídě použít jiný operátor který má rozdílné parametry, budu muset použít přátelskou.

 
Nahoru Odpovědět
25.2.2017 22:41
Avatar
Matej
Člen
Avatar
Odpovídá na petr.dar
Matej:26.2.2017 3:10

Zmen

bool my_struct::operator ==(const my_struct &X, const my_struct &Y)
{
    return (X.X == X.Y && Y.X == Y.Y);
}

za

bool operator ==(const my_struct &X, const my_struct &Y)
{
    return (X.X == X.Y && Y.X == Y.Y);
}
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
26.2.2017 3:10
Avatar
petr.dar
Člen
Avatar
Odpovídá na Matej
petr.dar:26.2.2017 8:21

Super, přesně tohle jsem potřeboval :-)

 
Nahoru Odpovědět
26.2.2017 8:21
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.