Przeładowanie operatorów, błąd kompilacji
Ostatnio zmodyfikowano 2014-09-01 19:27
ubidragon Temat założony przez niniejszego użytkownika |
Przeładowanie operatorów, błąd kompilacji » 2014-09-01 18:44:00 Witam, postanowiłem poćwiczyć przeładowanie operatorów. Napisałem własne, proste przeładowanie na wzór tego z pomocy Microsoft Visual Studio. Otrzymuję błąd kompilacji error C2440: '<function-style-cast>' : cannot convert from 'int' to 'klasa' class klasa { klasa operator +( klasa & inna ); private: int liczba; };
klasa klasa::operator +( klasa & inna ) { return klasa( liczba + inna.liczba ); }
Dlaczego jest błąd? |
|
Monika90 |
» 2014-09-01 18:59:16 klasa klasa nie ma konstruktora który przyjmuje argument typu int |
|
ubidragon Temat założony przez niniejszego użytkownika |
» 2014-09-01 19:15:14 Zrobiłem prosty konstruktor parametryczny i zadziałało. class klasa { public: klasa operator +( klasa & inna ); klasa( const int _liczba ); void wyswietl() { printf( "%d", liczba ); } private: int liczba; };
klasa::klasa( int _liczba ) { liczba = _liczba; }
klasa klasa::operator +( klasa & inna ) { return klasa( liczba + inna.liczba ); }
Dzięki wielkie. rozumiem, że jak chce przeciążać operatory to zawsze muszę w klasie tworzyć konstruktor parametryczny tak? I w ten sam sposób przeciążane są pozostałe operatory? |
|
Monika90 |
» 2014-09-01 19:27:23 Nie musisz tworzyć konstruktora by przeciążyć operatory. W tym wypadku, ponieważ operator + ma dostep do prywatnych składowych klasy, można było zrobić tak: klasa klasa::operator +( const klasa & inna ) const { klasa x; x.liczba = liczba + inna.liczba; return x; }
Ale lepiej z konstruktorem, w końcu i tak będzie on potrzebny. |
|
« 1 » |