Kezdőoldal » Számítástechnika » Programozás » Mi a különbség köztük? C++

Mi a különbség köztük? C++

Figyelt kérdés

return *this;

return new(*this);


2012. jún. 6. 18:43
1 2
 1/12 A kérdező kommentje:
Vagyis ha a return után szerepel a new kulcsszó akkor az miért más mintha anélkül returnoznák?
2012. jún. 6. 18:43
 2/12 A kérdező kommentje:

Helyesbítek ezek közt mi a különbség:

return new Mammal(*this);

return Mammal(*this);


Please írjatok tudnom kell.

2012. jún. 6. 18:47
 3/12 anonim ***** válasza:
56%

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.

2012. jún. 6. 19:00
Hasznos számodra ez a válasz?
 4/12 A kérdező kommentje:

Köszi tökéletes válasz volt :D

Adtam egy világi zöld kezet.

2012. jún. 6. 19:15
 5/12 iostream ***** válasza:
100%

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 :)

2012. jún. 6. 19:25
Hasznos számodra ez a válasz?
 6/12 A kérdező kommentje:

Köszi :D

Ment a zöld kéz.

2012. jún. 6. 19:38
 7/12 A kérdező kommentje:

"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?

2012. jún. 10. 23:01
 8/12 A kérdező kommentje:

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?

2012. jún. 10. 23:04
 9/12 iostream ***** válasza:

Dog(*this);


Ez a kifejezés szerinted melyik konstruktort fogja meghívni?

2012. jún. 11. 11:35
Hasznos számodra ez a válasz?
 10/12 A kérdező kommentje:

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?

2012. jún. 11. 16:32
1 2

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!