C++-ban hogy tudom C# szerűen használni az öröklés előnyeit? Hogyan tudok egyszerűen generikus tárolót csinálni és utólag cast-olgatni az elemeket felhasználás szerint?
C++-ban a "typeid" operátort és a "dynamic_cast" kulcsszót kell használni a C#-os "is" "as" megvalósítására.
Itt van egy példa: [link]
"származtatott példányokat ősosztály típusával deklarált listába pakolsz csak azért, hogy utána visszacastolgasd őket"
Ez igazából a feladattól függ. Például ha van egy Animal ős osztály, amiből különböző fajta állatokat származtatunk, akkor kellhet olyan tömb (lista, stb.), amibe valamilyen szempont szerint akarok bizonyos állatokat összegyűjteni, hogy a közös tulajdonságaiból csináljak valami lekérdezést, statisztikát, akármit. Ilyenkor pl. nem kell cast-olni őket.
Vagy mondjuk a képernyőn ablakokat, kontrollokat (widget-eket) akarok összegyűjteni egy megjelenítéshez, felsoroláshoz, akkor sem feltétlenül kell cast-olni, mert az adott műveletnél csak a közös viselkedésüket vagy tulajdonságaikat használom.
Tudom, ezek speckó feladatok, csak arra utalok, hogy ez mindig az adott feladattól függ.
Ezt kicsit benézted, mert a kezdőtőtől már azért jóval odébb vagyok, de persze az embernek mindig van még mit tanulnia.
Azzal egyetértek, hogy így feketén fehéren sehol nincs leírva, hogy ne csináld. Amire talán rá tudom részben húzni az a SOLID elvek közül a Liskov féle helyettesítési elv. De az se teljesen ezt mondja. Na de kódminőség és design terén eléggé sok szubjektív és részben íratlan szabály van. Például ilyen a hatalmas switch-case szerkezetek kerülése is (ami mellesleg sokszor pont öröklődéssel lehet kijátszani). Amit te írsz viszont, hogy minden subclasson másik metódust akarsz meghívni, ezt több subclass esetén szintén csak egy nagy switch case-el tudod megoldani. Már csak ezért sem tartom elegánsnak. Ettől független el tudok képzelni olyan helyzetet, ahol az általad leírt megoldást választanám, de ettől még nem tartom elegánsnak.
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!