Kezdőoldal » Számítástechnika » Programozás » Ez miért van így? És pontosan...

Ez miért van így? És pontosan mi is ez? Nem értem.

Figyelt kérdés

van egy függvény és benne egy lokális i változó:

return int(i); Egy int típust ad vissza.

Ezt jól tudom?Egyébként miért csak úgy jó hogy az i változót zárójelbe rakom?


És objektum esetében meg miért csak úgy jó,hogy a típust rakom zárójelbe?

return (cProba&)obj1;


2012. szept. 25. 18:18
 1/5 nagylzs ***** válasza:
Hiányzik "néhány" információ: milyen rendszeren milyen programozási nyelven melyik verziójában
2012. szept. 25. 19:54
Hasznos számodra ez a válasz?
 2/5 iostream ***** válasza:
100%

Ez szinte egyértelműen C++, két okból: az adott szintaktikával ez a legelterjedtebb nyelv, és a kérdező stílusát ismerjük már, és tudjuk, hogy azt próbálja megtanulni.


Szóval.


return int(i);

Ez nem intet ad vissza, ez egy intből fogja a visszatérési értéket kialakítani. Ha a visszatérési érték egy long, akkor simán, gond nélkül kasztol, ha a visszatérési érték short, akkor esetleg warningol, hogy narrowing cast, ha a visszatérési érték egy osztály, aminek van egy egyparaméteres, nem explicit konstruktora, ami intet (vagy intből "könnyen" konvertálható) típust fogad, akkor gond nélkül konvertál, ha egy olyan típust akarsz visszaadni, ami intből nem hozható létre, akkor fordítási hibát kapsz.


Valamint ha i egy lokális változó, amiből nem lehet intet csinálni (olyan, nem beépített típus, ami nem rendelkezik operator int függvénnyel), akkor szintén fordítási hibát kapsz, hiszen nem tudsz belőle intet csinálni.


Amúgy így is működik: (int)i, ezt hívjuk C-típusú kasztolásnak, és nem javallott a használata.


A saját típusnál is működik a típus(xy); forma, csak a cProba&-re csinálni kell typedefet, mert a referencia miatt nem fogja érteni a fordító:

typedef cProba& cProbaRef;

return cProbaRef(obj1);


De ha nem referenciával akarod, akkor simán megy.

2012. szept. 25. 20:04
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:

Értem.

És ez csak miért így jó?

return unsigned short(i); Az i egy unsigned short típus.Így rossz.

És így pedig jó: typedef unsigned short ushort;

return ushort(i);

2012. szept. 28. 02:48
 4/5 A kérdező kommentje:

Így szintaxis hiba:

unsigned short i_getAge(void)const{return unsigned short(*this->i_age);} //De miért?


És hogyha létrehozok egy szinonimát typedef-el az előjel nélküli típusra akkor meg jó.

unsigned short i_getAge(void)const{return ushort(*this->i_age);}


Ez miért van?

2012. szept. 28. 02:51
 5/5 iostream ***** válasza:
Mint említettem, pont ugyanazért, amiért a pointereket és a referenciákat sem lehet csak úgy natúr írni. Ilyen a szintaxis.
2012. szept. 28. 09:54
Hasznos számodra ez a válasz?

További kérdések:




Minden jog fenntartva © 2025, 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!