Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przeładowanie operatorów, błąd kompilacji

Ostatnio zmodyfikowano 2014-09-01 19:27
Autor Wiadomość
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'

C/C++
class klasa
{
    klasa operator +( klasa & inna );
private:
    int liczba;
};

klasa klasa::operator +( klasa & inna )
{
    return klasa( liczba + inna.liczba );
}

Dlaczego jest błąd?
P-116510
Monika90
» 2014-09-01 18:59:16
klasa klasa nie ma konstruktora który przyjmuje argument typu int
P-116511
ubidragon
Temat założony przez niniejszego użytkownika
» 2014-09-01 19:15:14
Zrobiłem prosty konstruktor parametryczny i zadziałało.

C/C++
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?
P-116512
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:
C/C++
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.
P-116513
« 1 »
  Strona 1 z 1