Kezdőoldal » Számítástechnika » Programozás » Hogy hozok létre egy osztály...

Hogy hozok létre egy osztály objektumot switch case-ben, vagy if-ben?

Figyelt kérdés

AZT szeretném, hogy egy osztály objektumot akkor jöjjön létre, ha teljesül egy feltétel, de NE szünjön még, ha vége as elágazáznak. C++


Pl class osztály{.….}


osztály objektum1; ez a normál példányosítás. Hogy van ez egy elágazásban, úgy hogy NE lokális legyen?



#C++ #osztály #objektumot
2016. márc. 10. 13:50
1 2
 1/20 Tengor ***** válasza:
Deklaráld az még az elágazások előtt! Az elágazásban vagy példányosítod vagy nem, aztán az elágazás után vizsgálod, hogy példányosítottad-e.
2016. márc. 10. 13:52
Hasznos számodra ez a válasz?
 2/20 anonim ***** válasza:

#1, szerintem a kérdező nem tudja mi a különbség a deklaráció és a példányosítás között.


Kérdező:

Amit írtál: osztály objektum1;

az a deklaráció és nem a példányosítás.


A példányosítás ez:

objektum1 = new osztály();


Természetesen lehet vegyesen is, azaz definiálni egy osztály típusú változót:

osztály objektum1 = new osztály();


Ha az elágazán előtt deklarálod és az elágazásban példányosítod, akkor az elágazás után is használható lesz. Ahogyan #1 írja.

Tehát az a lényeg, hogy a deklaráció olyan helyen legyen, hogy minden szükséges helyen látható, elérhető legyen. Például a függvény (alprogram) elején, így az egész függvényben használható.

2016. márc. 10. 14:07
Hasznos számodra ez a válasz?
 3/20 anonim ***** válasza:

Van egy ilyen hatáskörnek nevezett dolog. A Juhász Picis prog1 jegyzet faszán leírja. A lényeg az, hogy adott egy blokk, amiben te létrehozol valamit. Ez a létrehozott dolog egészen addig érhető el, amíg abban a blokkban vagy, ahol csináltad, vagy annak valamely leszármazott blokkjaiban. Na hogy világos legyen, bemutatom.


{

.. int a;

.. //itt elérhető az a

.. {

.. .. //itt is

.. }

.. {

.. .. //itt is

.. .. ,, {

.. .. ,, -- //itt is

.. .. ,, }

.. }

}

//itt már nem, mivel egy szinttel feljebb vagy, mint amiben csináltad.


Megoldás: hozd létre egy szinttel feljebb.

2016. márc. 10. 14:39
Hasznos számodra ez a válasz?
 4/20 anonim ***** válasza:
100%

#2: C++-ról van szó. "osztály objektum1;" példányosít, mégpedig a default konstruktorral!


Kérdező: Példányosítsd az if-en kívül, de az if-en belül inicializáld.


osztály objektum1;

if(valami)

objektum1 = osztály(1, "foo");

2016. márc. 10. 18:16
Hasznos számodra ez a válasz?
 5/20 anonim ***** válasza:
0%

osztály objektum1; // inicializálás

if(valami)

objektum1 = osztály(1, "foo"); // értékadás

2016. márc. 10. 18:31
Hasznos számodra ez a válasz?
 6/20 anonim ***** válasza:
Teljesen felesleges volt belekötni. Az inicializálás az, amikor beállítod a tagváltozók kezdőértékeit hogy felkészítsd a használatra az objektumot. Ez esetben az az if-ben történik mert a default konstruktorban nem akarjuk még felkészíteni az objektumot a használatra, gyakorlatilag egy dummy elemet hozunk létre egy üres default konstruktorral hogy lefoglaljuk az objektumnak a memóriát, és ha szükséges akkor inicializáljuk is az értékeit az if-ben. Sokszor előfordul az ilyen a tömbök használatánál: osztály tömb[100];
2016. márc. 10. 18:49
Hasznos számodra ez a válasz?
 7/20 anonim ***** válasza:
0%

"osztály tömb[100]"


Itt is mind a 100 elem inicializálva lesz, később pedig már értékadás fog történni. Ahol beállítódik a kezdő értéke hivatalosan azt nevezik C++ -an inicializálásnak, abból is 3 félét különböztetnek meg:

- zero-initialize

- default-initialize

- value-initialize

2016. márc. 10. 21:14
Hasznos számodra ez a válasz?
 8/20 anonim ***** válasza:
Sokféleképpen lehet értelmezni az inicializálást, de az a lényegen nem változtat. A példában a default konstruktorral csak memóriát foglalunk az objektumunknak de annak tagváltozói nem lesznek inicializálva addig, amíg be nem lép az if-be. Ennek persze semmi köze a kérdéshez úgyhogy nem tervezem ezt továbbvitatni. Ha nálad az inicializálás nem a kezdőértékek beállítását jelenti akkor ez van, használd a szót úgy ahogy akarod, csak a válaszaimba ne köss ezért feleslegesen.
2016. márc. 10. 22:42
Hasznos számodra ez a válasz?
 9/20 anonim ***** válasza:
0%

# 8/8 Időpont tegnap 22:42


C++-ban a dummy osztály adattagjai, a default konstruktorral is inicializálódnak (memóriaszeméttel, vagy default értékekkel). Nem Java, nem kapsz NPE-t.

2016. márc. 11. 07:31
Hasznos számodra ez a válasz?
 10/20 anonim ***** válasza:

#4

Köszi a javítást! Bevallom, rég c++-oztam, és most is pointerekben gondolkoztam annak ellenére, hogy sehol egy csillag. :)

2016. márc. 11. 08:38
Hasznos számodra ez a válasz?
1 2

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!