Portál AbcLinuxu, 8. listopadu 2025 15:15
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.