Dziedziczenie

Zaimplementuj klasy Figura, Kolo, Kwadrat i Trojkat oraz odpowiednie metody zgodnie z podanym diagramem (kliknij w obrazek aby powiększyć):

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.

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ć?