Rozwazmy definicje klas z zadania 2. Biezace zadanie polega na dodaniu nastepujacych rozszerzen: 1. Do klasy ExprConst dodac: a) nowy konstruktor jednoargumentowy z argumentem typu char * reprezentujacym tekstowo liczbe, ktora ma byc wartoscia tego wyrazenia; b) operator =, ktorego prawym argumentem jest liczba, ktory zmienia wartosc przechowywana w danym obiekcie przez zastapienie jej podana wartoscia; c) operatory +=, *=, -=, /=, ktorych prawym argumentem jest liczba, ktore zmieniaja wartosc przechowywana w danym obiekcie przez wykonanie stosownej operacji na dotychczas przechowywanej liczbie. 2. Do klasy ExprSum dodac: a) operator + z argumentem typu Expr *, ktory buduje nowy obiekt typu ExprSum; b) operator + z argumentem typu int, ktory buduje obiekt typu ExprSum (tworzac przy tym odpowiedni obiekt typu ExprConst). 3. Do klasy ExprProd dodac: a) operator * z argumentem typu Expr *, ktory buduje nowy obiekt typu ExprProd; b) operator * z argumentem typu typu int, ktory buduje obiekt typu ExprProd (tworzac przy tym odpowiedni obiekt typu ExprConst). 4. Dla wszystkich opisanych klas zdefiniowac (wirtualny) operator wyjscia <<, ktory wypisuje tekstowa reprezentacje wyrazenia na strumien wyjsciowy.