teriadan Posted Március 28, 2009 Share Posted Március 28, 2009 Üdv! Operator overloading problémám lenne, nem tudok összeadni két objektumot egy operátorral. A program elég primitív, a súlyzó két oldalára lehet súlyokat pakolni a + és - operátorokkal. A gond azzal az operátorral van, ami összeadná a jobb és bal oldalak értékét. (mainben ez a osszes=jobb+bal;) Szóval ebben kérném a segítségeteket mer már 3 napja ezen agyalok de sehol nem találtam rá választ. Előre is kösz! #include<iostream> using namespace std; class sulyok { private: int suly; public: // a set és get függvények void setsuly(int s) { suly=s; } int getsuly() { return suly; } // konstruktor és destruktor sulyok(int s) { suly=s; } ~sulyok() { } // operátorok sulyok operator+(int x) { suly=suly+x; return (*this); } sulyok operator-(int x) { suly=suly-x; return (*this); } sulyok operator+(sulyok &x) { return (*this); } }; void main() { // működés bemutatása sulyok jobb(0); sulyok bal(0); sulyok osszes(0); jobb=jobb+25; //+25 kg suly a jobb oldalra jobb=jobb+25; //+25 kg suly a jobb oldalra bal=bal+25; //+25 kg suly a bal oldalra bal=bal+25; //+25 kg suly a bal oldalra cout<<"-----1. allapot:-----"<<endl; cout<<"Jobb oldalon levo suly: "<<jobb.getsuly()<<endl; cout<<"Bal oldalon levo suly: "<<bal.getsuly()<<endl; cout<<"**********************************"<<endl; jobb=jobb-25; //-25 kg suly a jobb oldalrol bal=bal-25; //-25 kg suly a bal oldalrol cout<<"-----2. allapot:-----"<<endl; cout<<"Jobb oldalon levo suly: "<<jobb.getsuly()<<endl; cout<<"Bal oldalon levo suly: "<<bal.getsuly()<<endl; osszes=jobb+bal; //Két oldali súlyok összeadása cout<<"**********************************"<<endl; cout<<"-----Eredmeny:-----"<<endl; cout<<"A sulyzo teljes sulya: "<<osszes.getsuly()<<endl; } Idézés Link to comment Share on other sites More sharing options...
SixHouse Posted Március 28, 2009 Share Posted Március 28, 2009 Halló. Sztem objektumokat nem szoktunk összeadni. Mármint nem az ilyen "típusú" objecteket. De a megoldás gondolom én ez lesz: osszes = bal.getsuly() + jobb.getsuly(); Bár ez érdekesen összetákolt program Írj hogy jó-é vagy nem-é, mert akkor tüzetesebben átnézem, de sztem így működnie kell. csoki Idézés Link to comment Share on other sites More sharing options...
teriadan Posted Március 28, 2009 Author Share Posted Március 28, 2009 Kösz a segítséget, de a fledatom pont az lenne hogy operátorokat használjak (szám szerint 3-at) Suliban csináltunk olyat hogy két kutya nevér összeadtuk és kijött pl hogy morzsikormi, gondolom valahogy össze lehet adni így két egész számot is. Ha van javaslat vmi más operátorra, megoldásra azt is szívesen fogadom. Idézés Link to comment Share on other sites More sharing options...
SixHouse Posted Március 28, 2009 Share Posted Március 28, 2009 Sztem ez igy nem lesz megoldható, bár ilyet még nem csináltam. Ezt arra írom, ha nem csinálsz semmilyen műveletet sulyok operator+(sulyok &x) itt csak visszaadod a súlyát azzal nem változik semmi. Így próbáld: sulyok operator+(sulyok &x) { suly = suly + x.suly; return (*this); } De: Amikor meghívod ezt: osszes = bal + jobb; akkor végrehajtódik ez is: sulyok operator+(int x) nem csak ez:sulyok operator+(sulyok &x)! Tehát ha ezt:osszes = bal + jobb; egyszer hívod meg a legvégén, akkor jó értéket ad (ezt feltételezem mert 2 tesztesetet próbáltam) de a bal oldal értékét megváltoztatja. Hát próbáld ki, ennyit tudok segíteni, deaz biztos hogy ez: sulyok operator+(sulyok &x) { return (*this); } így magában nem fog csinálni semmit. Ha nem kapsz választ, akkor vesd fel a kérdésedet itt: prog.hu itt el is magyarázzák neked csoki Idézés Link to comment Share on other sites More sharing options...
teriadan Posted Március 29, 2009 Author Share Posted Március 29, 2009 Igen tudom hogy nem csinál semmit, azt csak azért írtam be, hogy legalább fordítási hiba ne legyen benne. Bepróbáltam ezt a kódot: sulyok operator+(sulyok &x) { suly = suly + x.suly; return (*this); } Ez bizony tökéletesen műkösik 1000 köszönet érte, sokat segítettél. Talán most már valahogy rájövök az operátorok lényegére. Idézés Link to comment Share on other sites More sharing options...
SixHouse Posted Március 29, 2009 Share Posted Március 29, 2009 Hát igen de ezt egyszer tudod használni a legvégén, nem tom kipróbáltad-e, hogy közben is beteszel egy ilyet. Na, de ha jó örülök hogy segíthettem És egy kis megjegyzés: object-ekől lévén szó - ehelyett: jobb=jobb+25; elég ennyi: jobb+25; Szerk: És neked nem az operátorok lényege jelent bajt sztem, mert az megy ahogy látom, hanem az osztályok. suly = suly + x.suly; ez a dolog: suly az adott osztályra vonatkozik (*this.suly) /this = osszes/ ebben az esetben és a jobb illetve bal oldal súlyárhoz pedig a paraméteren (sulyok &x) keresztül férsz hozzá (x.suly) . értsd: osszes.suly = osszes.suly + param.suly; egyszer a jobb oldalra vonatkozik egyszer a bal oldalra, csak éppen amikor a ...jobb+bal; rész lefut akkor végrehajtódik ez is: sulyok operator+(int x) //az x az most ugye a bal oldali súlyt jelenti: osszes = jobb + bal { suly=suly+x; return (*this); } tehát ez: suly=suly+x; ami jelen esetben ezt jelenti: jobb.suly = jobb.suly + x; Hát nem nagyon tudok magyarázni úgy veszem észre de remélem segítettem. csoki Idézés Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.