====== Dziedziczenie ======
===== Figury =====
Zaimplementuj klasy **Figura**, **Kolo**, **Kwadrat** i **Trojkat** oraz odpowiednie metody zgodnie z podanym diagramem (kliknij w obrazek aby powiększyć):
{{:zajecia:po:figury1.png?300|}}
Konstruktory domyślne inicjują wartości boków figur (promienia) zerami zaś zmienna **nazwa** jest inicjowana łańcuchami znaków, odpowiednio: "Figura", "Kwadrat", "Kolo" i "Trojkat".\\
Metody **Obwod()** i **Pole()** dla obiektu klasy **Figura** niech zwracają wartość 0.\\
Dociąż operator << dla obiektu klasy **Figura** oraz strumienia wyjściowego **ostream** (uczyń tą funkcję przyjacielem klasy Figura), tak aby wywołanie postaci:
Kwadrat k(3);
cout << k << endl;
Trojkat t(3,4,5);
cout << t << endl;
generowało nastepujący komunikat:
Kwadrat o polu 9 i obwodzie 12.
Trojkat o polu 6 i obwodzie 12.
Metody Pole() i Obwod() nie muszą (a nawet nie powinny) być definiowane dla klasy Figura. Uczyń je czysto wirtualnymi.
===== Klasa Wielomian =====
Punkt na płaszczyźnie:
struct Punkt
{
double x;
double y;
};
**1.** Utwórz klasę pochodną klasy **Wielomian** o nazwie **Prosta**.\\
Zadeklaruj i zdefiniuj konstruktory:
Prosta();
Prosta(double a,double b);
Prosta(Punkt x1,Punkt x2);
Prosta(const Prosta &p);
Zaimplementuj metody:
Punkt PunktPrzeciecia(const Prosta &p) const;
double MiejsceZerowe();
Prosta Prostopadla(Punkt x);
2. Utwórzu klasę pochodną klasy **Wielomian** o nazwie **Parabola**.\\
Zadeklaruj i zdefiniuj konstruktory:
Parabola(double a,double b,double c);
Parabola(const Parabola &p);
Zaimplementuj metody:
int MiejscaZerowe(double &x1,double &x2);
double Ekstremum();
Jakie metody, które nie są dziedziczone, należy jeszcze zaimplementować?