Polecenie:
Programowanie obiektowe
Zdefiniuj klasę liczb zespolonych tak, aby mogła zostać wykorzystana w poniższym programie i zapewnia poprawne wyniki obliczeń:
#include <iostream>
#include "complex0.h"
int main()
{
complex a(3.0, 4.0); //inicjalizacja wartości (3, 4i)
complex c;
std::cout << "Podaj liczbę zespoloną (k, aby zakończyć):\n";
while(std::cin >>c)
{
std::cout << "c to " << c << '\n';
std::cour << "sprężona z c to " << -c << '\n';
std::cout << "a to " << a << '\n';
std::cout << "a + c wynosi " << a + c << '\n';
std::cout << "a - c wynosi " << a - c << '\n';
std::cout << "a * c wynosi " << a * c << '\n';
std::cout << "2 * c wynosi " << 2 * c << '\n';
std::cout << "Podaj liczbę zespoloną (k, aby zakończyć):\n";
}
std::cout << "Gotowe\n";
return 0;
}
Zauważ, że trzeba będzie przeciążyc operator << i >>. Standard c++ ma już w nagłówku 'complex' wbudowaną obsługę liczb zespolonych (i to bardziej rozbudowaną niż w powyższym przykładzie), więc aby uniknąc kolizji z biblioteką, zastosuj się dla pliku deklaracji klasy nazwę 'complex0.h'. Wszędzie tam, gdzie zasadne, stosuj modyfikacji 'const'.
Oto pożądany wynik programu:
Podaj liczbę zespoloną (k, aby zakończyć):
składowa rzeczywista: 10
składowa urojona: 12
c to (10, 12)
sprzężona z c to (-10, -12i)
a + c wynosi (13, 16)
a - c wynosi (-7, -8i)
a * c wynosi (-18 76i)
2 * c wynosi (20, 24)
Podaj liczbę zespoloną (k, aby zakończyć):
składowa rzeczywista: k
Gotowe
Zauważ, że przeciążona wersja operatora >> w wyrażeniu cin >> c powinna pytać o obie składowe (rzeczywistą i urojną) z osobna.
Próbowałem wykorzystać struktury zamieniając je na przeciążenia operatorów, jednak to spowodowało, że nie mam żadnego pomysłu na stworzenie odpowiedniego konstruktora zawierającego 2 operandy.
Proszę o podpowiedź jaki mógłby być uniwersalny kontruktor w programie, który mógłbym wykorzystać przy przeciążeniach.