====== Przeciążanie operatorów ======
===== Zadanie - Klasa wielomian =====
1. Przeciąż dla klasy ''Wielomian'' operator przesunięcie bitowego ''<<'' w taki sposób aby realizował wypisanie wielomianu w strumieniu wyjściowym ''ostream''. \\
Przykład:
Wielomian w1;
cout << w1 << endl;
2. Dociąż operator przypisania ''='' dla klasy wielomian w taki sposób aby możliwe było wykonanie poniższej operacji.
double wsp[] = { 3 , 5 , 1};
int st=2;
Wielomian w1(st,wsp);
Wielomian w2;
w2=w1;
3. Dociąż operator ''+'' tak aby realizował dodawanie dwóch wielomianów
Wielomian w1, w2;
cout << "w1 + w2 = " << w1 + w2 << endl;
4. 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.
5. Przeciąż operator [] tak aby zwracał odpowiedni współczynnik wielomianu:
Wielomian w;
cout << w[0] << end;
w[0]++;
cout << w << end;
6. 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ć?
7. Przeciąż jednoargumentowy operator * tak aby relizował pochodną stopnia 1-go.
Wielomian w1;
cin >> w1;
Wielomian pochodna = *w1;
Wielomian pochodna2 = ****w1;
8. 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;