====== Przeciążanie operatorów ====== ===== Zadanie - Klasa wielomian ===== Dla operacji wykonywanych na obiektach klasy Wielomian dociąż operatory =,*,*=,+,+=,-,-=,== jako metody składowe tej klasy. Wielomian w1, w2; Wielomian w3 = w1 + w2; Wieomian w4 = w1 * 3.1; Wielomian w4 = w1 * w4; if (w1 == w2) cout << "Wielomiany są identyczne" << endl; // itd. Przeciąż operatory << i >> jako funkcje zaprzyjaźnione z klasą Wielomian tak aby realizowały wczytywanie ze strumienia wejściowego i wypisywanie do strumienia wyjściowego: Wielomian w; cout << "Podaj współczynniki wielomianu:" cin >> w; cout << "Oto wielomian" << w << endl; Przeciąż operator [] tak aby zwracał odpowiedni współczynnik wielomianu: Wielomian w; cout << w[0] << end; w[0]++; cout << w << end; Przeciąż operator () tak aby zwracał wartość wielomianu dla danej wartości rzeczywistej: Wielomian w; double y = w(3.1); cout << "wartosc wynosi " << y << endl; Wyznaczanie wartości wielomianu można zrealizować korzystając ze [[wppl>Schemat_Hornera|schematu Hornara]]. \\ Dlaczego warto go zastosować? Przeciąż jednoargumentowy operator * tak aby relizował pochodną stopnia 1-go. Wielomian w1; cin >> w1; Wielomian pochodna = *w1; Wielomian pochodna2 = ****w1; Zrealizuj przekształcanie typu ''double'' na obiekt typu ''Wielomian''. Wielomian w1; double x = 5.1; cin >> w1; Wielomian w2 = w1 + (Wielomian)x; Wielomian w3 = w2 - 1.2; **Przyładowy diagram UML klasy Wielomian ** {{.:2011_1:wielomian1.png}} ===== Zadanie - Klasa liczb wymiernych ===== Dla operacji wykonywanych na obiektach klasy Wymierna dociąż operatory =,*,*=,+,+=,-,-=,== jako metody składowe tej klasy. Wymierna w1(1,2), w2(3,4); Wymierna x = w1 + w2; Wymierna y = w1 * 3; // itd. if (w1 == w2) cout << "Liczby są identyczne" << endl; Przeciąż operatory << i >> jako funkcje zaprzyjaźnione z klasą Wymierna tak aby poprawne wczytywanie ze strumienia wejściowego i wypisywanie do strumienia wyjściowego: Wymierna w(1,3); cout << "Oto liczba " << w << endl; Przeciąż operator rzutowania obiektu typu Wymierna na typ ''double'' Wymierna w1(5,6); double x = w1 * 3.1; Wymierna w3 = w1 + 3.1; ===== Zadanie - Program Słownik ===== Rozwiń program [zajecia:po_2013_1:zajecia2#Słownik|Słownik] z poprzednich zajęć dodając przeciążenie operatorów. * operator ''<<'' dla klasy **Dictionary**, **Tree** i **Node** wypisuje zawartość obiektu do strumienia wyjściowego (''ostream'') * operator ''>>'' dla klasy **Dictionary** wczytuje wszystkie wyrazy ze strumienia wejsciowego (''istream'') * operator ''+='' dla klasy **Tree** dodaje wyraz (''string'') do drzewa * operator ''='' dla klasy **Dictionary** (lub **Tree**) kopiuje zawartość słownika (lub drzewa) * operator ''+'' dla klasy **Tree** lub **Dictionsry** dodaje zawartość dwóch słowników (lub drzew) * operator ''[]'' dla klasy **Dictionary** zwraca liczbę wyrazów danych argumentem Przykłady: Dictionary slownik; cin >> slownik; cout << slownik; int i = slownik["Ala"] Dictionary slownik2 = slownik + slownik;