Portál AbcLinuxu, 13. května 2025 20:26
class MojeT { public: Citac():hodnota(1) {} operator int() { return (int(hodnota)); private: int hodnota; }; int main() { MojeT m1; int a=m1; // toto provest lze MojeT m2=a; // toto provest nelze; return 0; }Přiřazení směrem int = Moje_Trida je možné provést ale opačným směrem mi to kompilátor nedovolí. Mohli byste mi říct, jak to přetízit, aby bylo možné přiřadit MojeTrida = int. Díky
MojeT():hodnota(1) {}.. to teď píšu uplně všude, to mám z té učebnice :)
int a = m1;
se pouzije kopirovaci konstruktor pro typ int
s parametrem int
. Pri tom se provede implicitni konverze toho objektu MojeT
na int
za pouziti toho pretizeneho operatoru pretypovani.
V dalsim radku se nepouziva pretizitelny operator =
ale konstruktor s parametrem int
. Operator by se pouzil pri MojeT m2; m2 = a;
nebo m2 = 5;
Mozna je mozne dodefinovat (pres nejakou friend funkci?) konverzi z int
na MojeT
. V tom pripade by tato konverze probehla a pak by se pouzil kopirovaci konstruktor MojeT
s parametrem MojeT
, ktery je implicitne definovan jako bitova kopie objektu (lze samozrejme predelat, viz kapitola copy constructory).
Ale nevim, jak by mel pochopit kompilator, ze ma automagicky vytvorit pretypovani z int
na MojeT
jen na zaklade toho ze zna konverzi opacnou, to mi prijde jako nesmysl. Konverze v obou smerech prece muze vypadat uplne jinak, viz treba float
na int
.
Je mozne ze se nekde mylim, uz si to 100% nepamatuju. Zejmena v tak prasackem jazyce jako je C++ je tohle pomerne slozite. ;)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.