Hogyan tudok egy függvényben egy statikus és egy nem statikus változónak az értékét kiírni (c++)?
Ha statikus változóval foglalkozok akkor statikus függvényt kell létrehozzak, ha pedig nem statikussal akkor a függvény is ilyen kell legyen. Na de a kettőt nem lehet egy függvényben kiíratni?
pl:
private:
int a;
static int b;
public:
void print(){cout << a << b;}
Ebben az esetben ha a függvényt úgy deklarálnám, hogy static void print(), akkor baj lenne az a-val, ha meg úgy ahogy fent írtam akkor a b-vel van a gond.
A kettőt hogyan lehet "összehozni" anélkül, hogy az a változóból is ne csináljak statikusat?
A statikus azt jelenti, hogy osztályszintű.
A nem statikus azt jelenti, hogy objektumszintű, vagyis példányosítani kell hozzá.
Objektumszintű függvényből eléred mindkettőt, de
statikus függvényből csak a statikusakat, értelemszerűen: hiszen a statikus függvény osztályszinten létezik és fut le, nem tud a példányokról.
Foglalkoztam és kiírtam a problémám egy másik fórumba ahol az a válasz helyett, hogy "Kicsit még foglalkozz vele :D", kaptam egy normális választ amely segített. Nem is tudom minek kellett neked koki2000 ide írni? Valami felsőbb hatalom kényszerített, hogy írjál valamit ide, még ha segíteni nem is tudsz?
Amúgy az első jól leírta, csak nem erőst értettem a választ...
"ha meg úgy ahogy fent írtam akkor a b-vel van a gond"
de mi vele a gond? ugye, hogy semmi?
Mi a hibaüzi pontosan?
Mert annak működnie kéne.
a nem statikus függvény is el tudja érni a statikus változót, mert abból csak egy van
a statikus függvény is el tudná érni a nem statikus változót, csak ott a bökkenő, hogy
1. nem biztos, hogy van
2. melyik példányét érné el
csak ennyi gond van
Példányosítottad az osztályt? Nem lehet, hogy az 'a' változóval van gondja?
Úgy képzeld el, hogy alap esetben (static nélkül) az osztály metódusai egyszer szerepelnek a memóriában, a változók (adatok) pedig annyiszor, ahány objektumot (példányt) létrehoztál az osztályból. Amikor meghívsz egy metódust, akkor az osztály(!) metódusa indul el, amiből egy van, és aminek ugye tudnia kell, hogy melyik példány adataival kell épp dolgoznia. (Erre való a 'this' paraméter, amit alapból megkap a metódus. Ez egy pointer, ami az objektumra, tehát az éppen aktuális adatokra mutat.) Vagyis objektum példány nélkül nincs mivel dolgoznia a metódusoknak.
Namost a 'static' adatok nem az objektumban vannak, hanem a metódusok "mellett" az osztályban, és nem is kerülnek bele az objektumokba. Tehát csak egyszer szerepelnek, akárhány objektumot is hozol létre. Ebből egyrészt az következik, hogy objektum nélkül is tud működni egy megfelelő metódus, de ehhez static metódusnak kell lennie. Ez jelzi, hogy a metódus csak sztatikus adatokat használ, tehát példányosítás nélkül is meghívható.
Ahogy az elején kérdeztem is, lehet, hogy nem példányosítottad az osztályt. Ilyenkor nem a b-vel van gond, hanem hogy objektum nélkül egyszerűen nincs 'a' változó.
Szóval tedd ki ide légyszives, hogy hogyan hívtad meg a metódust, hogyan példányosítottad, stb.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!