Objektové C++
Chtěl bych se zeptat na jeden začátečnický dotaz.
Používat globální proměnné je zlozvyk ze středověku.
Tudíž se snažím založit třídu a používat hodnotu v ní jako "globální proměnnou":
(Nebojte třída bude ještě rozšířena )
// původně:
int nejakaPromenna;
//posléze:
class nejakaTrida
{
private:
int hodnota;
public:
int vratHodnotu();
void nastavHodnotu(int noveCislo);
};
int nejakaTrida::vratHodnotu()
{
return hodnota;
}
void nejakaTrida::nastavHodnotu(int novaHodnota)
{
hodnota = novaHodnota;
}
nejakaTrida tatoTrida;
//Posléze tedy píší všude v programu,namísto:
nejakaPromenna = 20;
tatoTrida.nastavHodnotu(20);
//Pripadne :
int mainBuffer = tatoTrida.vratHodnotu;
Na první pohled vypadá asi vše bezproblémově.
Jenomže i když se program spustit podaří, nabere nedefinovaný stav a spadne.
Nemohu si dovolit uvádět celý kód (je to idiotsky(tm) dlouhé).
Proto se chci zeptat- mám podezření na výmaz údajů.
Je nedefinována někde po opuštění funkce nastavená hodnota v této třídě ?
Jako laik bych řekl, že ne... ale padá možná kvůli tomuto program ....
Uvedenou hodnotu sdílí několik různých funkcí.
Nerozumiem co sa to vlastne pytas, ale tu triedu mas principialne spravne.
Problem moze byt v tom ze kde mas zadefinovany ten objekt,
nejakaTrida tatoTrida;
ak chces pouzivat ten objekt ako globalny, tak moze byt tento riadok v programe len raz a len v jednom *.cpp subore , aby si mal len jeden fyzicky objekt, ak chces dat definiciu premennej tatoTrida
do *.h suboru, tak len s klucovym slovom extern (snad to ide aj u tried).
Dalsia vec je ze premennu nemas inicializovanu pokial ju prvy krat nenastavis, to sa riesi tym ze v konstruktore triedy si nastavis tu hodnotu napr. na 0 alebo na parameter konstruktora apod.
BTW. prejst z globalnej premennej na globalnu triedu, to je pokrok Globalne hocico je co sa tyka spravy a navrhu programu zle p.s. netvrdim ze ja nikdy globaly nepouzivam, ale ked uz robim nieco prasacky, tak uz potom nemam snahu to zabalovat do tried
P.S. riadok
int mainBuffer = tatoTrida.vratHodnotu();
mas tam dufam aj tie zatvorky