Przeładowanie operatorów - "==" czyli true/false.

0
#include <iostream>
#include <cmath>
#include <string>
#include <cstdlib>
#include <ctime>

class Kwadrat
{
private:
	double bok;
public:
	Kwadrat(double bok)
	{
		this->bok = bok;
	}

	Kwadrat operator+(Kwadrat k)
	{
		Kwadrat wynik(this->bok + k.bok);
		return wynik;
	}

	double pole()
	{
		return bok + bok;
	}

	void wypisz()
	{
		std::cout << pole() << std::endl;
	}

	bool operator==(Kwadrat k)
	{
		return this->pole() == k.pole();
	}
};

int main()
{

	Kwadrat k1(55);
	//k1.wypisz();

	Kwadrat k2(55);
	//k2.wypisz();

	Kwadrat k3 = k1 == k2;
	k3.wypisz();

	return 0;
}

To taki testowy projekt. Pomińmy, że licząc pole kwadratu dodaję bok do boku a nie mnożę przez 4 bo tak jak piszę, jest to testowy projekt gdzie co chwilę coś zmieniam, sprawdzam i testuję.
Pytanie jest następujące: Dlaczego przy przeładowaniu operatorów "==", który zwraca false = 0 albo true = 1 to mi zwraca 2? I czy ten mój zapis w przypadku sprawdzanie, czy k1 jest równy k2 jest poprawny? Bo jak zapiszę "Kwadrat k3(k1==k2); to też zadziała, ale czy poprawnie?

Z góry dziękuję.

0

Bo nie wysyłasz na ekran wartości logicznej tylko robisz k1.wypisz() jak dasz std::cout<<(k1==k2); to powinno być ok.

1

k1 == k2 zwraca true, potem to jest rzutowane na 1.0 gdy trafia do konstruktora k3, no i pole() jest implementowane jako bok + bok czyli 1.0 + 1.0


Kwadrat k3 = cos;

jest równoważne

Kwadrat k3(cos);

Pierwszy przypadek to inicjalizacja, więc konstruktor kopiujący będzie używany, a nie operator przypisania.

0

@JasnyPiorun: Operatory Ci się pomerdały. Ty potrzebujesz dwuargumentowego

E: Chodzi mi oczywiście o operator+

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.