Új hozzászólás Aktív témák
-
Z_A_P
addikt
1
A screenshotban nem
for (Egitest* b : EgitestLista) {
van, hanem
Egitest b - csilag nelkul.2
typeid(Bolygo) == typeid(b)
Ilyet nem hasznalunk, helyette dyamic_cast<>, ami NULL-t ad vissza ha nem sikerult a cast. Termeszetesen pointert/referenciat hasznalunk.3
Az egesz kod buzlik, ha a listadban Egitest van, es azon kell ilyeneket futtatni, akkor inkabb az Egitest classban kellene egy virtualis GetKeringesiTavolsag().+1
Borzaszto stilus a magyar/angol keveres "GetKeringesiTavolsag"
Hasznalj 100%-ban CSAK angol neveket, minding mindenre.
Ezzel csak nyerhetsz, meghozza sokat. -
mgoogyi
senior tag
A screenshotodban nem pointered van, hanem normál objektumod.
Gondolom a listáddal is ugyanaz a helyzet.Ezzel az a baj, ha csinász egy ilyet, hogy:
Bolygo b;
Egitest e;
e = b; // az EgitestHozzaad-nál gyakorlatilag ezt csinálodEzesetben az "e" egy ledarált Egitest méretű változó lesz, amit a "b" égitestből örökölt részei adnak.
Ez az egész castolás téma akkor nyerhet értelmet, ha pointert vagy ref-et castolsz.
Látom c# háttered van.
C++-ban a normál értékadás by value megy összetett típusokra is, amit pl. az EgitestHozzaad függvény bemenő paraméternél történik. (Kb. mint a struct c#-ban)
Ez azt jelenti, hogy mindig egy másolat változóba megy az adat, amibe vagy copy konstruktorral vagy = operatorral kerül be az adat.A a = b; // copy ctor
a = b; // = operatorHa ki akarod használni a polimorfizmust, akkor vagy referenciákkal vagy pointerekkel kell dolgoznod.
A * a / A & aMiért akarsz visszacastolni bolygóra? Nem azért tartod közös kollekcióban az objektumokat, hogy mind ugyanúgy kezelhesd a közös interfaceükön keresztül?
-
Silεncε
őstag
Az úgy szerintem nem lesz jó, hogy egy Bolygó típusú változónak egy Bolygó*-ot akarsz átadni. Ha emlékezetem nem csal, C++-ban működik, hogy (Bolygó*), de nem vagyok benne biztos.
Egyébként a VS az aláhúzás mellé magyarázatot is ad, azt is beírhatnád ide, valszeg hamarabb jönne válasz
-
amdni
aktív tag
Leírnám újra hátha nem vagyok egyértelmű:
van egy egitest típus
továbbá bolygó és csillag típus, ezeknek az őse az egitest.
Egy listában szeretnék őket tárolni.
list<egietst> lista;Szeretném kiolvasáskor megállapítani hogy pl. bolygó-e, és utána kasztolni az eredeti típusra, de nem tudom megoldani, alá van húzva a "b" betű.
bolygo temp;
for (Egitest* b : EgitestLista) {
if (typeid(Bolygo) == typeid(b)) {
temp = dynamic_cast<Bolygo*>(b); //itt a hiba! -
dabadab
titán
Erre van a typeid:
if ( typeid(*b) == typeid(bolygo) ) {
// ....
}C++-ban egyébként szerintem nem jó ötlet C-s pointereket alkalmazni: a legtöbb esetben egyáltalán nem kell pointer (főleg mióta van move semantics), a maradék nagy részében referenciákat lehet használni, ami meg ezek után is megmarad, ott meg a C++-os smart pointereket.
Új hozzászólás Aktív témák
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Autós topik
- Nintendo Switch 2
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Kertészet, mezőgazdaság topik
- Debrecen és környéke adok-veszek-beszélgetek
- Xiaomi 13 - felnőni nehéz
- Építő/felújító topik
- Fortnite - Battle Royale & Save the World (PC, XO, PS4, Switch, Mobil)
- Luck Dragon: Asszociációs játék. :)
- Vicces képek
- További aktív témák...
- BESZÁMÍTÁS! Gamer számítógép Asus B150M i3 6100 16GB DDR4 240GB SSD GTX 1050 Ti 4GB Sharkoon 500W
- Azonnali készpénzes AMD Ryzen 1xxx 2xxx 3xxx 5xxx processzor felvásárlás személyesen / csomagküldés
- BESZÁMÍTÁS! Apple iMac Pro (2017) 5K - Xeon W-2140B 64GB DDR4 RAM 1TB SSD Radeon PRO Vega 56 8GB
- LG 65QNED87T / 65" - 164 cm QNED / 4K UHD / 120Hz & 3ms / HDR 10 Pro / FreeSync Premium / HDMI 2.1
- Samsung Galaxy S25 Ultra 1TB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: Promenade Publishing House Kft.
Város: Budapest