Przeciążenie operatora =

Odpowiedz Nowy wątek
2011-07-14 14:59
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; 

Pozostało 580 znaków

2011-07-14 15:03
0

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


Potrzebujesz programy do szkoły/na zaliczenie? Pomocy podczas kolosa lub egzaminu?
Zamów go!

http://proogramy.c0.pl

Pozostało 580 znaków

2011-07-14 15:27
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ć.

Pozostało 580 znaków

2011-07-14 15:29
0

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

Pozostało 580 znaków

2011-07-14 16:11
0

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

MojaKlasa=5;


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

2011-07-14 17:14
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.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2011-07-15 07:39
0

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

Pozostało 580 znaków

2011-07-15 09:16
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?

Pozostało 580 znaków

2011-07-15 09:31
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ć.

Pozostało 580 znaków

2011-07-15 11:15
Guest
0

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

Polecam przeczytac. malo tekstu, duzo informaci.

Pozostało 580 znaków

2011-07-15 23:04
0

_13th_Dragon twojego pomysłu z konstruktorem na razie nie udało mi sie wprowadzić w życie.
To rzeczywiście bardzo trudne zadanie:

 
#include <iostream>
using namespace std;

class Cmoja
{
public:
int dana;
Cmoja(int dana=0):dana(dana) {}
}MojaKlasa;

int main()
{
MojaKlasa=5;

cout<<MojaKlasa.dana<<endl;
cin.get();
return 0;
}


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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