Hogy hozok létre egy osztály objektumot switch case-ben, vagy if-ben?
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?
#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ó.
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.
#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");
osztály objektum1; // inicializálás
if(valami)
objektum1 = osztály(1, "foo"); // értékadás
"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
# 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.
#4
Köszi a javítást! Bevallom, rég c++-oztam, és most is pointerekben gondolkoztam annak ellenére, hogy sehol egy csillag. :)
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!