Kezdőoldal » Számítástechnika » Programozás » Hogyan tudok egy függvényben...

Hogyan tudok egy függvényben egy statikus és egy nem statikus változónak az értékét kiírni (c++)?

Figyelt kérdés

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?


2013. okt. 27. 11:06
 1/10 anonim ***** válasza:
100%

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.

2013. okt. 27. 11:27
Hasznos számodra ez a válasz?
 2/10 A kérdező kommentje:
Bocsi de ebből nem igazán tudom leszűrni a megoldást a problémára. Pár napja kezdtem csak ezekkel foglalkozni.
2013. okt. 27. 12:00
 3/10 anonim ***** válasza:
53%
Kicsit még foglalkozz vele :D
2013. okt. 27. 12:20
Hasznos számodra ez a válasz?
 4/10 A kérdező kommentje:

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...

2013. okt. 27. 13:30
 5/10 anonim ***** válasza:

"ha meg úgy ahogy fent írtam akkor a b-vel van a gond"


de mi vele a gond? ugye, hogy semmi?

2013. okt. 27. 13:40
Hasznos számodra ez a válasz?
 6/10 A kérdező kommentje:
Az a gond, hogy a statikus b-t ki akarom íratni de a függvény nem statikus, ezért hibát ad ki.
2013. okt. 27. 14:44
 7/10 anonim ***** válasza:

Mi a hibaüzi pontosan?

Mert annak működnie kéne.

2013. okt. 27. 15:05
Hasznos számodra ez a válasz?
 8/10 anonim ***** válasza:
100%

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

2013. okt. 27. 16:26
Hasznos számodra ez a válasz?
 9/10 iostream ***** válasza:
Ahogy az utolsó mondja. Bármelyik eléri bármelyiket, csak a member változóhoz (a nem statikushoz) kell egy objektum. Ezt a tagfüggvényeknél a rejtett this pointer adja.
2013. okt. 27. 21:32
Hasznos számodra ez a válasz?
 10/10 anonim ***** válasza:

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.

2013. okt. 28. 12:24
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!