Portál AbcLinuxu, 13. května 2025 20:26

Dotaz: C++ začátečnické problémy II

4.10.2007 14:29 radek
C++ začátečnické problémy II
Přečteno: 706×
Odpovědět | Admin
Prosil bych o další radu ohledně C++. Řeším přetížení operátotu int, tak aby uměl správně přiřadit typ int vytvořenému objektu a naopak. Ve knize jsem se dočetl, že by mělo stačit napsat přetížení jedním směrem a druhým to prý kompilátor pochopí.. viz příklad:

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
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

4.10.2007 14:32 radek
Rozbalit Rozbalit vše Re: C++ začátečnické problémy II
Odpovědět | | Sbalit | Link | Blokovat | Admin
pardon u konstruktoru ma být samozřejmé
MojeT():hodnota(1) {}  
.. to teď píšu uplně všude, to mám z té učebnice :)
4.10.2007 14:53 Tom.š Ze.le.in | skóre: 21 | blog: tz
Rozbalit Rozbalit vše Re: C++ začátečnické problémy II
Odpovědět | | Sbalit | Link | Blokovat | Admin
Přetížit operator =. Nebo - pro dané použití - konstruktor.
4.10.2007 15:05 radek
Rozbalit Rozbalit vše Re: C++ začátečnické problémy II
Díky, to je fakt, že není problém přetížit operator =.
4.10.2007 15:12 MiK[3]Zz
Rozbalit Rozbalit vše Re: C++ začátečnické problémy II
Odpovědět | | Sbalit | Link | Blokovat | Admin
Myslim, ze sa tu nema nikto pytat na problemy ohladne programovania, ak nie su uzko prepojene s inymi problemami. Myslim, ze to bude cim skor zamknute.
4.10.2007 15:22 radek
Rozbalit Rozbalit vše Re: C++ začátečnické problémy II
Aha, to se omlouvam.... V tom pripade bych mel posledni dotaz, jestli nevite o nejakych vhodnych poradnach o programovani /nejlepe C++/
Luboš Doležel (Doli) avatar 4.10.2007 15:25 Luboš Doležel (Doli) | skóre: 98 | blog: Doliho blog | Kladensko
Rozbalit Rozbalit vše Re: C++ začátečnické problémy II
Builder.cz
4.10.2007 16:40 petris
Rozbalit Rozbalit vše Re: C++ začátečnické problémy II
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nebo si muzete udelat konstruktor, ktery ma jeden parametr typu int.
4.10.2007 20:13 pht
Rozbalit Rozbalit vše Re: C++ začátečnické problémy II
Odpovědět | | Sbalit | Link | Blokovat | Admin
Muj pokus o vysvetleni udalosti:

Pri tom pri prikazu 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. ;)
5.10.2007 01:22 petris
Rozbalit Rozbalit vše Re: C++ začátečnické problémy II
Konverze na MojeT z intu se provede, pokud existuje konstruktor MojeT(int) a nema zakazano ho vyuzivat pro konverzi.
5.10.2007 09:17 radek
Rozbalit Rozbalit vše Re: C++ začátečnické problémy II
Dekuju za radu. Funguje je to krasne.. Takovyhle veci mi vubec nedochazej, bohuzel. A v knize o takovyhle vecech neni ani zminka..

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.