Odpovim trochu otazkou
Mějme následující jednoduchou třídu a funkci main():
- Kód: Vybrat vše
#include <iostream>
using namespace std;
class Object {
private:
int a;
public:
Object(int a) {
this->a = a;
cout << "Volam konstruktor pro Object s hodnotou = " << a << endl;
}
~Object() {
cout << "Volam destruktor pro Object hodnoty = " << a << endl;
a=0;
}
void increment() {a++;}
int get() { return a; }
};
int main(int argc, char* argv[]) {
Object a(5);
Object b = Object(6);
Object* c = new Object(7);
cout << "a:" << a.get() << " b:" << b.get() << " c:" << c->get() << endl;
delete c;
}
a mejme nasledujici vystup tohoto programu:
- Kód: Vybrat vše
Volam konstruktor pro Object s hodnotou = 5
Volam konstruktor pro Object s hodnotou = 6
Volam konstruktor pro Object s hodnotou = 7
a:5 b:6 c:7
Volam destruktor pro Object hodnoty = 7
Volam destruktor pro Object hodnoty = 6
Volam destruktor pro Object hodnoty = 5
Kdyžtak se ptej, čemu v tom příkladě nerozumíš
Jsou tam ukázány 3 možnosti jak sestrojit instanci třídy, neboli objekt.
Pro každou instanci se někde uloží obsah jejích vnitřních proměnných - v tomhle případě je to int a;
Pro celou třídu (Object) se vytvoří jedna tabulka, mapující jméno metody na něco, nazvěme to ukazatel na tělo metody.
a při vyvolání třeba: b.get(); se první nahrají vnitřní proměnné objektu b - tedy hodnota a. Pak se zjistí podle deklarace že b je typu Object, a najde se mapa funkcí pro Object.
no a nakonec se zavolá z této mapy metoda get();
A dále je v příkladu ukázáno kdy se volá konstruktor, a kdy destruktor, což jsou vlastně speciální metody třídy.
Doufám že jsem se do toho moc nezamotal