/* * rational_prog.cpp * * Created on: 28.02.2013 * Author: trifon */ #include using namespace std; #include #include "rational.h" // декларация на функцията read void read(); // декларация на клас // class Student; double f(int x) { static int y = 2; class Complex { private: double re, im; public: Complex(double r, double i) { re = r; im = i; } double abs() const { return y + sqrt(re*re + im*im); } }; Complex c(x, 1); return c.abs(); } int main() { Rational r; r.print(); // извиква конструктор по подразбиране Rational q = Rational(); // конструктор за инициализация Rational s = Rational(3, 5); // еквивалентно извикване Rational p(3, 5); r.read(); // нарушаване на абстракцията // p.denom = 0; // колко пъти ще се извика конструкторът за копиране тук? Rational result = add(r, p); result.print(); // три начина за извикване на конструктор за копиране // Rational r2(r); Rational r2 = r; // Rational r2 = Rational(r); /* * нарушаване на абстракцията cout << r.numer << ' ' << r.denom << endl; cout << q.numer << ' ' << q.denom << endl; cout << s.numer << ' ' << s.denom << endl; cout << p.numer << ' ' << p.denom << endl; */ // !!! print(r); cout << "r & r2: "; r.print(); r2.print(); q.print(); s.print(); p.print(); cout << sizeof(Rational) << ' ' << sizeof(r) << endl; Rational* pr = &r; Rational** ppr = ≺ // !!! cout << r << endl; cout << pr << endl; pr = &r2; // (*pr).print(); pr->print(); r2.print(); //(*pr).read(); pr->read(); r2.print(); (*ppr)->print(); pr = NULL; // !!! pr->read(); Rational& ra = r; r.read(); ra.print(); read(); ::read(); cout << f(1) << endl; // !!! Complex c; // !!! GCD g; // !!! Rational::GCD g(2, 3); class RationalPoint { Rational x,y; public: RationalPoint(Rational p) : x(p), y(3,5) { } void print() const { x.print(); y.print(); } RationalPoint(RationalPoint const& rp) : x(rp.x), y(rp.y) { cout << "RationalPoint copy constructor" << endl; } }; RationalPoint rp(Rational(2,3)); rp.print(); RationalPoint rp2 = rp; // конструкторите за копиране на Rational се извикват автоматично rp2.print(); Rational newr = 5; // Rational newr(5); newr.print(); add(3, Rational(2,3)).print(); // add(Rational(3), Rational(2,3)).print(); Rational newr2 = 1.2; newr2.print(); // !!! int x = Rational(7); // cout << x << endl; Rational pp(1,3), qq(3, 5); Rational a[5] = { Rational(), Rational(5, 7), pp, Rational(qq), 10 }; for(int i = 0; i < 5; i++) a[i].print(); Rational b[5]; for(int i = 0; i < 5; i++) b[i].print(); pr = new Rational; // pr = new Rational(); pr->print(); // !!! pr = new Rational = r; Rational* pr2 = new Rational(3,4); pr2->print(); Rational* pr3 = new Rational(*pr2); pr3->print(); Rational* pr4 = new Rational[5]; pr4[4].print(); // !!! Rational* pr5 = new Rational[5](3,5); Rational** pr5 = new Rational*[10]; for(int i = 0; i < 10; i++) pr5[i] = new Rational(i+1,i+2); for(int i = 0; i < 10; i++) pr5[i]->print(); for(int i = 0; i < 10; i++) delete pr5[i]; delete[] pr5; delete[] pr4; delete pr3; delete pr2; delete pr; return 0; }