Mi a különbség köztük? C++
return *this;
return new(*this);
Helyesbítek ezek közt mi a különbség:
return new Mammal(*this);
return Mammal(*this);
Please írjatok tudnom kell.
Ez a Mammal téma, látom már, nagyon régóta foglalkoztat itt valakit. :D
return new Mammal(*this);
Ez a sor azt jelenti, hogy létrejön egy új Mammal objektum a *this paraméterrel (mert ugye a Mammal-nak van egy olyan konstruktora, ami ezt a *this-t várja el. A *this pedig azt az objektumpéldányt jelenti, ahol ez a kód fut). Majd a metódus visszatér egy erre az új objektumra mutató pointerrel (azaz az obj. címével).
return Mammal(*this);
Ez nekem nem tűnik értelmes kódnak, de lehet, hogy én tévedek. Az biztos, hogy itt nincs new, tehát nem pointerről van szó. Viszont akkor inkább ennek látom értelmét:
return *this;
ez visszatér az adott objektum másolatával (asszem másolatról van szó - rég volt már C++).
return this;
ez visszatér az adott objektumra mutató pointerrel.
Remélem, hasznos voltam, bár tökéletes választ nem tudok adni sajnos.
Köszi tökéletes válasz volt :D
Adtam egy világi zöld kezet.
Attól függ, hogy van deklarálva a függvény, egészen pontosan mi a visszatérési értéke.
new Mammal(*this);
Ennek a kifejezésnek a típusa Mammal* (és közben létrejön a heapen, azaz a dinamikus memóriában egy Mammal típusú objektum)
return Mammal(*this);
ennek pedig Mammal (és közben a stacken, azaz a vermen létrejön egy Mammal típusú objektum, ami jó esetben, ha jól írtad meg a másoló konstruktort, annak az objektumnak a másolata, amin meghívtad a függvényt).
Tehát ha a visszatérési érték olyan, hogy Mammal*-ból tud létrejönni, akkor az első a helyes, ha olyan, hogy Mammal típusból tud létrejönni, akkor a második.
Pl ha ez a függvényed:
Mammal* Mammal::Clone()
{
return new Mammal(*this);
}
akkor gratulálok, megvalósítottad a virtuális copy konstruktort :)
Köszi :D
Ment a zöld kéz.
"visszatér egy erre az új objektumra mutató pointerrel (azaz az obj. címével)."
Ha itt cím szerint történik minek hívódik meg a másoló konstruktor?
virtual Mammal* Copy()const {return new Dog(*this);}
Így van Dog osztályban a függvény.
Miért hívódik meg a másoló konstruktor is?
Dog(*this);
Ez a kifejezés szerinted melyik konstruktort fogja meghívni?
A másoló konstruktort fogja.
De itt a konstruktor(nem a másoló) kellene meghívódni mert itt létrehozunk egy új objektumot.
Persze csak ha ott a new előtte.
A te példádnál azt hiszem,hogy az alapértelmezett konstruktor fog meghívódni nem?
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!