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.

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;
  }

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