Napišite enum razred ColorCode, ki ima vrednost:
    Red = 31,
    Green = 32,
    Blue = 34
    Default = 39

Priložen imate razed PrintUtility, ki ga vključite v svoj projekt, saj ga boste pri tej nalogi uporabili. Le-ta nam bo omogočil, da izpisujemo lahko barvno besedilo v konzoli. Vendar, da bo to delovalo, je potrebno na začetek funkcije main dodati vrstico:
    system(("chcp "s + std::to_string(65001)).c_str());.
    Lahko se zgodi, da v primeru uporabe kakšnega drugega programa (kaj drugega kot CLion) ta funkcionalnost ne bo delala.

Napišite razred Shape2D, ki ima:
    instančno spremenljivko color (tip ColorCode),
    konstruktor z 1 parametrom,
    abstraktno metodo getSurfaceArea in
    abstraktno metodo draw.

Napišite razred Rectangle, ki deduje iz razreda Shape2D in ima:
    dodatni instančni spremenljivki width in height,
    konstruktor s 3 parametri,
    implementirani metodi getSurfaceArea in draw,
    metodo toString.

Z metodo getSurfaceArea želimo dobiti vrednost ploščine lika.

V metodi draw je pričakovano, da izrišemo lik (lahko s pomočjo zvezdic).

Napišite razred Canvas, ki ima:
    instančno spremenljivko shapes (tip vector<Shape2D*>),
    metodo addShape, ki doda lik v shapes, in
    metodo print, ki izriše vse like.

Dodajte še sami eni razred, ki bo dedoval iz razreda Shape2D.

V glavnem programu ustvarite en objekt tipa Canvas in ga napolnite z vsaj 5 liki.

Za nalogo narišite UML diagram. Lahko na list papirja, vendar ga je treba slikati ali skenirati in tudi oddati na eštudij. Lahko pa ga ustvarite s pomočjo https://app.diagrams.net/ ali s podobno aplikacijo.

Pri reševanju naloge upoštevajte vso dosedaj pridobljeno znanje (uporaba inicializacijskega seznama, konstantne metode, zapišite si metode get/set tam, kjer jih potrebujete itd.).

Primer izpisa glavnega programa.

int main() { system(("chcp "s + std::to_string(65001)).c_str());

Canvas c;
c.addShape(new Rectangle(ColorCode(ColorCode::Green), 5, 2));
c.addShape(new Rectangle(ColorCode(ColorCode::Blue), 10, 5));
c.print();

return 0;

}

Uporabi:

PrintUtility.cpp PrintUtility.h