Jump to content

Žebříček

Populární obsah

Showing content with the highest reputation on 05/03/21 in all areas

  1. Ahoj! Čo sa týka tvojho problému dynamicky alokovanej class osobne neodporúčam v rámci školského prostredia využívať vector. Na 90% to nie je cieľ daného zadania, pretože to robí väčšinu práce za teba (v praxi to samozrejme odporúčam). Dynamicky alokuješ triedu veľmi jednoducho myObj* object = new myObj[10] Najskôr si musíš vytvoriť pointer (ukazovateľ) na tvoj objekt (to sa robí pomocou hviezdičky), v tomto kóde je to reprezentované ako premenná "object", do ktorej si vložíš pole tried "myObj" (pre koreknosť: vloží sa do nej len ukazovateľ na pamäťový priestor kde je alokované naše pole tried, keďže naša premenná je typu pointer na triedu). Takýmto zapísom si triedu dynamicky alokuješ, čo znamená že je alokované na heap, nie na stack. Nezabudni že až prácu s objektom dokončíš, tak vzhľadom na to že je alokovaná na heap ju musíš vždy uvolniť až s ňou prácu dokončíš, aby si predišiel memory leakom. delete[] object; Všimni si tých zatvoriek, tie sa udávajú ak chceš uvolniť pole, keďže v tomto prípade máme pole tried. Čo sa týka tvojho druhého problému ohľadom abstraktných tried. Všeobecne je v C++ definované, že čistá abstraktná trieda je taká trieda, ktorá neobsahuje žiadne členské premenné a nachádzajú sa v nej iba čisté virtuálne funkcie (metódy), teda metódy bez definície. Napriklad: class MyClass{ MyClass(){}; virtual ~MyClass() {}; virtual void mymethod() = 0; }; Čisto abstraktná trieda je často krát definovaná ako interface, jej hlavne využitie je na to, aby bola zdedená inými triedami kde sa chovanie metód prepíše, teda je určená na polymorfizmus. V tomto prípade je deklarácia konštruktora nie celkom nutná (kompilátor ho tam aj tak dopíše), avšak odporúča sa kvôli prehľadnosti kódu. Deklarácia deštruktora je nutná, keďže je nutné ho nastaviť ako virtuálny, aby naša trieda spĺňala vlastnosti čistej abstraktnej triedy a hlavne aby sme predišli nepredvídateľnému správaniu.
    1 point
×
×
  • Create New...