Przeciążenie operatora =

0

Nie mogę rozgryźć tego jak przeładować operator "=" . Operatory +, -,*,/ mam zrobione bo do tego jest pełno przykładów.

Przykładowo mam prościutką klase i chciałbym jej przypisywać wartość w polu dana w taki oto sposób:


class Cmoja
{
public:
    int dana;   
}MojaKlasa;

MojaKlasa=5; 
0

A w czym masz problem? To się robi analogicznie to pozostałych operatorów.

0

No właśnie niebardzo rozumiem. Przeciążanie to dla mnie zupełna nowość i jakoś jeszcze tego nie połapałem o co kaman. Mam taki błąd :

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)

Mój operator przeciążenia wyglada tak:


    Cmoja& Cmoja::operator=(const Cmoja& object)
    {
        if (&object != this)
        {
            dana=object.dana;
        }
        return *this;
    }

Domyślam się, że chyba jest jakiś problem z konwersją typu int na klasę tylko nie wiem jak to rozwiązać.

0

Bo musisz mieć przeciążony operator=(int).

0

class Cmoja
{
public:
int dana;
Cmoja(int dana):dana(dana) {} // wystarczy odpowiedni konstruktor
}MojaKlasa;

MojaKlasa=5;

0

nazewnictwo jest źle zrobione, bo MojaKlasa to nie jest klasa, ale obiekt klasy Cmoja. Wiem, że się czepiam, ale im szybciej zrozumiesz jak nazywać, rzeczy tym szybciej będziesz w stanie pisać większy kod.

0

Na parametrze metody przeciążającej podajesz typ jaki będziesz umieszczać po prawej stronie operatora.

0

winerfresh dzięki , zadziałało ! :)
_13th_Dragon twojego pomysłu z konstruktorem na razie nie udało mi sie wprowadzić w życie.
MarekR22 fakt z tymi nazwami dałem plame, nie mam wyrobionego nawyku nadawania właściwych nazw

Na parametrze metody przeciążającej podajesz typ jaki będziesz umieszczać po prawej stronie operatora.

Rozumiem, że dzięki temu operator = mogę przeciążyć na kilka sposobów zależnie od tego jaki typ będę chciał przypisać do klasy?

0
Yoshi_80 napisał(a)

Na parametrze metody przeciążającej podajesz typ jaki będziesz umieszczać po prawej stronie operatora.

Rozumiem, że dzięki temu operator = mogę przeciążyć na kilka sposobów zależnie od tego jaki typ będę chciał przypisać do klasy?

Jak najbardziej. Miej jednak na uwadze niejawną konwersję typów. Z przeciążeniami operatorów trzeba bardzo uważać.

0

http://xion.org.pl/files/texts/mgt/html/2_2.html

Polecam przeczytac. malo tekstu, duzo informaci.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0