Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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í. :-/

Předmět Autor Datum
Nerozumiem co sa to vlastne pytas, ale tu triedu mas principialne spravne. Problem moze byt v tom z… poslední
MM.. 28.03.2007 01:44
MM..

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

Zpět do poradny Odpovědět na původní otázku Nahoru