[C++] moduł liczby zespolonej

diego_maradona
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 16 cze 2010, o 00:59
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 80 razy

[C++] moduł liczby zespolonej

Post autor: diego_maradona »

W zdefiniowanej przez użytkownika klasie complexType ( obsługującej liczby zespolone) dodałem przeciążenie operatora ! , dzięki czemu szybko można obliczyć moduł danej liczby zespolonej.


Kod: Zaznacz cały

complexType complexType::operator!() const
{
	double modulus;

	modulus = sqrt(realPart*realPart+imaginaryPart*imaginaryPart);

	return modulus;
}

plik z funkcją main ma postać:

Kod: Zaznacz cały

#include "stdafx.h"
#include <iostream>
#include "complex_numbers.h"

using namespace std;

int main()
{
    complexType number1(2,30);
	
	
	cout<<!number1;

	cout<<endl;
	system("PAUSE");
	return 0;
}

output w konsolce po prawidłowej kompilacji ma postać
30.0666 0i
Co oczywiście jest prawdą , ale to 0i wygląda strasznie niezgrabnie. Ma ktoś pomysł na to jak je usunąć, z możliwie najmniejszą ingerencją w kod ?

prawdopodobnie problem leży w przeciążeniu operatora <<

Kod: Zaznacz cały

ostream& operator<<(ostream& osObject	, const complexType& complex)
{
	osObject<<complex.realPart<<" ";
	
	osObject<<complex.imaginaryPart;
	osObject<<"i";
	


	return osObject;
}
-- 18 wrz 2011, o 16:17 --

dokonałem przeróbki w przeciążeniu <<

Kod: Zaznacz cały

if(complex.imaginaryPart != 0)
	{
		osObject<<complex.imaginaryPart;
		osObject<<"i";
	}
I teraz jest niby w porządku... ale nurtuje mnie jeszcze jedna rzecz, dlaczego było to "0i" skoro wyrażenie modulus jest typu double a nie complexType?
Awatar użytkownika
Zordon
Użytkownik
Użytkownik
Posty: 4977
Rejestracja: 12 lut 2008, o 21:42
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 75 razy
Pomógł: 910 razy

[C++] moduł liczby zespolonej

Post autor: Zordon »

Przecież Twój operator \(\displaystyle{ !}\) zwraca complex. Pytanie jedynie dlaczego zwrocony double dobrze się rzutuje na complexa, nie znam sie na c++ ale być może masz konstruktor ktory bierze doubla i dlatego to działa.
ODPOWIEDZ