Jump to content
PirateClub.hu

Operátor overloading segítség kéne


teriadan
 Share

Recommended Posts

Ü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;
}

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 :D

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.

Link to comment
Share on other sites

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 :lol: de remélem segítettem.

 

csoki

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Hozzászólás a témához...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Jelenleg olvassa   0 members

    • No registered users viewing this page.
×
×
  • Create New...