Kezdőoldal » Számítástechnika » Programozás » C++ ban, egy osztály egyik...

C++ ban, egy osztály egyik tagfüggvényének ellátása a const utószóval, mit eredményez?

Figyelt kérdés

Pl:

Tort::Kiir(ostream& s) const

{...}


2011. máj. 10. 15:04
 1/4 anonim ***** válasza:

Azt, hogy konstans objektumon is meg lehet hívni.

Tehát.


const Tort x;

// na EZ nem fordulna le, ha a Kiir nem lenne const

x.Kiir(cout);


Kis elmélet mögé. Minden C++ osztály metódusának van egy rejtett this paramétere, ami arra az objektumra mutat, amin meghívtad a függvényt. Ha const objektumon hívsz meg egy függvényt, ami nem const, akkor egy const objektumra mutató nem-const thised lenne, ami fordítási hibát okoz, nem tudsz const this-ből (ami a konstans objektumod címe) nem-const this-t csinálni (ami a függvény paramétere lenne), C++ nem engedi a const -> nem-const konverziót.

2011. máj. 10. 15:58
Hasznos számodra ez a válasz?
 2/4 A kérdező kommentje:

És nem lehet ez úgy is konvertálni, hogy

const_cast<tort>(*this)?

2011. máj. 11. 15:58
 3/4 anonim ***** válasza:

const_cast<Tort*>(this)


De lehet, csak nem szép. És ráadásul csak akkor garantált a hibamentes működés, ha az objektum amire mutat a this nem konstans igazából, csak mondjuk függvényparaméterben const&-ként (konstans referencia) lett átadva. Ha a változó eredetileg is const, akkor ez bizony undefined behavior, ha módosítasz rajta valamit a hekkelt this-en keresztül.

2011. máj. 12. 08:09
Hasznos számodra ez a válasz?
 4/4 anonim ***** válasza:
Vagy ha te arra gondoltál, hogy a const_cast<Tort>(*this) leírása után az objektum már nem lesz konstans? Na most ez nem így működik, a konstansságát nem tudod megváltoztatni egy objektumnak, az a típus része, C++ pedig erősen és statikusan típusos nyelv, azaz fordítási időben tudjuk _minden_ objektum típusát. A const_cast az visszaad egy nem-const (vagy épp const, ha arra castolod) verziót a paraméteréből, most hirtelen nem is tudom hogy pointeren meg referencián kívül működik-e bármi másra...
2011. máj. 12. 08:11
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!