Задача 0 Дефинирайте клас, който описва дата с характеристики ден, месец и година. Дефинирайте конструктор по подразбиране, конструктор с параметри, подходящи селектори и мутатори, функция за извеждане на датата на екрана. Обектите, които се създават трябва да бъдат валидни дати. Задача 1 Дефинирайте клас, който описва полином с коефициенти цели числа (може и друг тип данни, например комплексни или рационални числа). Дефинирайте подходящи конструктор по подразбиране, конструктор с параметри и член-функции за: извеждане на полинома на екрана; пресмятане на стойността на полинома в дадена точка x <тип> evaluate (double x) const; променя на коефициента пред определена степен void setCoef(int degree, <тип> newCoef); връщане на коефициент пред определена степен <тип> getCoef(int degree) const. Задача 2 Дефинирайте клас, който описва карта за игра с характеристики боя и сила. Дефинирайте подходящи конструктор по подразбиране, конструктор с параметри и следните член-функции: селектори и мутатори за член-данните; извеждане на картата на екрана; сравнение на две карти: bool isEqual (const Card& ) const. Задача 3 Дефинирайте клас, който описва колода от карти със следните характеристики: масив от карти (обекти от класа, дефиниран в предходната задача); индекс top, който посочва коя е картата на върха на колодата. Дефинирайте конструктор по поразбиране, който инициализира колодата от 52 карти. Дефинирайте член-функции за: извеждане на колодата на стандартния изход; проверка дали колодата е празна // дали са раздадени всички карти bool isEmpty() const; раздаване на карта: връща се картата, която е най-отгоре на колодата; разбъркване на картите в колодата. Можете да използвате алгоритъма на Fisher - Yates.