/* * Andrzej ZieliƄski * ne ind. 116366 * klasa liczby zespolone */ #include #include #include using namespace std; template class complex_base { protected: type a, b; public: complex_base(type a1 = 0, type b1 = 0) : a(a1), b(b1) { } type real() { return a; } void real(type a) { this->a = a; } type imag() { return b; } void imag(type b) { this->b = b; } void print() const { cout << a << ", j" << b; } friend ostream& operator<<(ostream& ostre, const complex_base& z) { ostre << z.a << ", j" << z.b; return ostre; } }; template class extended_complex: public complex_base { public: extended_complex(type a1 = 0, type b1 = 0) : complex_base(a1, b1) { } double mod() { type a2 = complex_base::a * complex_base::a; type b2 = complex_base::b * complex_base::b; return sqrt(a2 + b2); } double arg() { return atan2(complex_base::b, complex_base::a); } void print() { cout << mod() << ", " << arg(); } }; int main() { complex_base X(7, -10); const complex_base& Y = X; cout << "Zawartosc Y: " << Y << endl; Y.print(); shared_ptr> X1(new complex_base(143, -24)); shared_ptr> Y1; Y1 = X1; Y1->print(); cout << "\nZawartosc Y1: " << *Y1 << endl; extended_complex Z(5, 3); Z.print(); cout << "\nMod: " << Z.mod(); return 0; }