Kezdőoldal » Számítástechnika » Programozás » Van ilyen adatszerkezet c++ban?

Van ilyen adatszerkezet c++ban?

Figyelt kérdés

Lehet csinálj, olyan adatszerkezet, mely osztály on mutatóit tárolja?


Tehát pl van egy class Cseresznyefa{} és a mainben Cseresznyefa *cseresznyefa.


Na ezt a *cseresznyefa és más osztályok mutatóit, hogy lehet tömbbe, vagy bármibe berakni.



2016. márc. 20. 10:05
 1/10 anonim ***** válasza:
Cseresznyefa* tomb[elemszám];
2016. márc. 20. 10:10
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:
Cseresznyefa *cseresznyefa[]
2016. márc. 20. 10:11
Hasznos számodra ez a válasz?
 3/10 A kérdező kommentje:

Akkor lehet, hogy rosszul fogalmaztam:


Egy ilyesmit keresek, hogy:


valami[*cseresznyefa, *akacfa, ....];


De úgy hogy előtte deklarálom őket így:

Cseresznyefa *cseresznyefa = new Cseresznyefa();

Akácfa *akácfa = new Akácfa();


És aztán rakom őket tömbbe, vagy valamilyen adatszerkezetbe. Hogy megtehessem azt, hogy


valami[0]->getTermes(); Ez lényegében ez lenne

cseresznyefa->getTermes();

2016. márc. 20. 10:36
 4/10 anonim ***** válasza:
Szabványos C++-ban nem lehet különböző típusokat rakni egy tömbbe. Lehet, hogy unionokkal vagy void típusú mutatók tömbjével meg lehet oldani valami hasonlót, de így ebben a formába nem működne. Persze elnézést, ha tévednék.
2016. márc. 20. 10:55
Hasznos számodra ez a válasz?
 5/10 A kérdező kommentje:
Bármilyen adatszerkezet jó lenne nem feltétlenül tömb.
2016. márc. 20. 11:09
 6/10 anonim ***** válasza:

Esetleg próbáld meg az objektumorientált programozást arra használni, amire jó.


Csinálsz egy Fa ősosztályt, melynek Cseresznyefa és Almafa a leszármazott osztályai lesznek. Ekkor:

Cseresznyefa* csfa = new Cseresznyefa();

Almafa* afa = new Almafa();


Fa* tomb[] = {csfa, afa};

2016. márc. 20. 12:59
Hasznos számodra ez a válasz?
 7/10 anonim ***** válasza:

Felmerül a kérdés, minek hajigálnál össze olyan dolgokat, amiknek nincs közük egymáshoz.


Ha van közük egymáshoz, akkor

a) Egy részük átemelhető egy közös ősosztályba.

b) Összedolgoznak valamihez. Egy harmadik osztály tagjai lesznek, amely képviseli ezt a valamit.

c) Az egyik használja a másikat. A használt osztály a használó tagja lesz.


Ahogyan a kolléga előttem is jelezte, te gyaníthatólag az A esetre gondolsz: mindkettő fa, tehát kell nekik egy Fa ősosztály.


Ha nem erre gondoltál, akkor viszont nem tudjuk, konkrétan mit szeretnél megvalósítani, félhomályban tapogatózva pedig nehéz tanácsot adni.


Egyébiránt a tömb rugalmatlan, problémás adatszerkezet, és nem is igazán OO (lásd: primitive obsession). Van vector vagy list, érdemes azt használni.

2016. márc. 20. 13:26
Hasznos számodra ez a válasz?
 8/10 anonim ***** válasza:
100%

Csak hogy értsd, hogy amit írsz miért nem lehetséges:


Van két osztályod, legyen cseresznyefa, meg akácfa. Két teljesen különböző osztály, semmi közük egymáshoz.


Deklarálsz egy tömböt, vagy akármilyen tároló szerkezetet, amibe ezeket bepakolod. Rendben. De ha később használni akarod őket, akkor előjönne a probléma:

Írsz egy kódot, hogy vegye elő a tömböd i. elemét, és hajtson végre rajta valamit. Na de honnan tudhatjuk, hogy a tömböd i. elemében olyan elem van, amin végre tudod hajtani a kívánt utasítást? Lehet, hogy a cseresznyefán végre tudod hajtani, de az akácfán nem. Amikor a programod fordul, akkor a fordítód nem fogja tudni, hogy később melyik pozícióra milyen elemeket pakolsz. Épp ezért ezt nem engedi a szabvány. A C++ egy erősen típusos nyelv, és ehhez hozzátartozik az, hogy tárolókba csak egy meghatározott, előre deklarált típust pakolhatsz.


Kivéve amikor mégsem. Arra ugyanis van lehetőséged, hogy a cseresznyefa és az akácfa osztályok hasonlóságait kiszervezed egy Fa osztályba, és az említett két osztályt ebből származtatod le. Ezesetben a Cseresznyefa osztály objektumai egyben Fa objektumok is lesznek., ugyanígy az Akácfa osztálynál. Ami azt jelenti, hogy ha létrehozol egy tárolót (tömböt), amibe Fa típusú elemeket pakolsz, abba tudsz rakni Cseresznyefa és Akácfa típusú elemeket is. Viszont azt tartsd szem előtt, hogy hiába van benne Cseresznyefa, a fordítód azt Fa objektumként fogja kezelni, éppezért csak olyan műveleteket fog engedélyezni a tömb elemeire, amik a Fa ősosztályon definiálva vannak. Itt jönnek elő olyan dolgok mint virtuális metódusok, meg override.


Kielégítő volt a válasz?

2016. márc. 20. 15:56
Hasznos számodra ez a válasz?
 9/10 A kérdező kommentje:

Tökéletesen kielégítő volt a válasz.


Egy másik helyen ajánlották a factory metódust is.

2016. márc. 20. 16:17
 10/10 anonim ***** válasza:
Annak ehhez nincs sok köze, hacsak nem mi értjük félre, mit szeretnél.
2016. márc. 20. 18:07
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!