Kezdőoldal » Számítástechnika » Programozás » Mire jó az operator=?

Mire jó az operator=?

Figyelt kérdés

Annyit tudok,hogy ez hívódik meg amikor :

CatOne = CatTwo;


2012. márc. 30. 23:40
1 2
 1/18 anonim válasza:
6%
Az operator az a nagyszabású vacsora, melyet a zenés színpadi előadások után tartanak a fellépők és a direktor tiszteletére.
2012. márc. 31. 00:02
Hasznos számodra ez a válasz?
 2/18 anonim ***** válasza:

Mire jó az operator+ vagy bármelyik operátor, ennyi erővel ezt is kérdezheted.


Ugye az = jel az értékadás, na de mi van akkor, ha saját típusokat vagy osztályokat használsz és ezeket és tudni szeretnéd egymásnak értékül adni?

A fordító néz majd és nem ért semmit.

Az operator= felüldefiniálja az alapvető operátor műveletet, ezzel megadhatod, hogy miként hajtsa vége, ha például azt írod be, hogy "CatOne = CatTwo;".



(Mellékes, de te ha jól sejtem valami könyvből vagy leírásból tanulsz, nem lenne jobb ott utána nézni?

Mert eléggé hasonló kódokkal fordulsz mindig ide, hogy ez vagy az mit jelent. Nincs ott leírva, ahonnan a kód van, vagy te csinálsz ilyen kusza dolgokat?)

2012. márc. 31. 00:02
Hasznos számodra ez a válasz?
 3/18 A kérdező kommentje:

A 24 órás könyvből tanulok és nincs nagyon részletezve ezen kívül a felfogásom nem túl jó.

Nehezen értek meg dolgokat.

2012. márc. 31. 00:10
 4/18 A kérdező kommentje:

De ezt nem értem:

.....

const CAT CAT::operator= (const CAT &rhs)

{

cout <<"operator= \n";

if(this == &rhs)

return *this;

delete itsAge;

delete itsWeight;

itsAge = new ushort;

itsWeight = new ushort;

*itsAge = rhs.GetAge();

*itsWeight = rhs.GetWeight();

return *this;

}


Minek kell az összehasonlítás?

if(this == &rhs)


És mi az istennek törölni,benne a tagváltozókat ha úgyis újból lefoglalunk nekik területet.

2012. márc. 31. 00:49
 5/18 anonim ***** válasza:
100%
mert talán a C++ könyv ELEJÉN kellene kezdeni az olvasást, nem pedig rögtön az operátor overloaddal...
2012. márc. 31. 00:57
Hasznos számodra ez a válasz?
 6/18 anonim ***** válasza:

Ez igaz, amíg egy valami nem tiszta, ne menj tovább!

Kicsit vissza kéne lépned a könyvben.

2012. márc. 31. 01:06
Hasznos számodra ez a válasz?
 7/18 A kérdező kommentje:
Igen így tettem ezért tartok csak háromnegyed év után a könyv felénél.
2012. márc. 31. 20:32
 8/18 A kérdező kommentje:

//main.cpp

# include <iostream> //std::cin;std::cout;std::endl;std::string;

# include <string> //std::string;

# include <windows.h> //Sleep(500);exit(0);

# include <stdlib.h> //EXIT_SUCCESS;


typedef unsigned short ushort;

typedef unsigned int uint;


using std::cout;

using std::cin;

using std::endl;

using std::string;



//create CAT

class CAT

{

public:

CAT(); //konstruktor

CAT(ushort age,ushort weight); //konstruktor2

CAT(const CAT &rhs); //copy konstruktor

~CAT(); //destruktor

const CAT operator= (const CAT &rhs); //operator=


const CAT& operator++ (); //operator++ prefix

const CAT operator++ (int); //operator++ postfix

const CAT operator+ (const CAT &rhs); //operator+


ushort GetAge()const;

void SetAge(ushort age);

ushort GetWeight()const;

void SetWeight(ushort weight);

private:

ushort *itsAge;

ushort *itsWeight;

};


//konst,konst2,copy konst,dest,operator=

CAT::CAT():

itsAge(new ushort(0)),

itsWeight(new ushort(0))

{cout <<"Konstruktor \n";}


CAT::CAT(ushort age,ushort weight):

itsAge(new ushort(age)),

itsWeight(new ushort(weight))

{cout <<"Konstruktor2 \n";}


CAT::CAT(const CAT &rhs)

{

cout <<"Copy konstruktor \n";

itsAge = new ushort;

itsWeight = new ushort;

*itsAge = rhs.GetAge();

*itsWeight = rhs.GetWeight();

}


CAT::~CAT()

{

cout <<"Destruktor \n";

delete itsAge;

delete itsWeight;

itsAge = NULL;

itsWeight = NULL;

}


const CAT CAT::operator= (const CAT &rhs)

{

cout <<"operator= \n";

if(this == &rhs)

return *this;

delete itsAge;

delete itsWeight;

itsAge = new ushort;

itsWeight = new ushort;

*itsAge = rhs.GetAge();

*itsWeight = rhs.GetWeight();

return *this;

}


//operator++ pre,operator++ post,operator+

const CAT& CAT::operator++ ()

{

cout <<"opeator++ prefix \n";

++*itsAge;

++*itsWeight;

return *this;

}


const CAT CAT::operator++ (int)

{

cout <<"operator++ postfix \n";

++*itsAge;

++*itsWeight;

return *this;

}


const CAT CAT::operator+ (const CAT &rhs)

{

cout <<"operator+ \n";

return CAT(*itsAge+rhs.GetAge(),*itsWeight+rhs.GetWeight());

}


//metódus

ushort CAT::GetAge()const

{return *itsAge;}


void CAT::SetAge(ushort age)

{*itsAge = age;}


ushort CAT::GetWeight()const

{return *itsWeight;}


void CAT::SetWeight(ushort weight)

{*itsWeight = weight;}



//main start.

int main()

{

CAT CatOne(2,3),CatTwo(4,6),CatThree;

cout <<"\nCatOne age: "<< CatOne.GetAge() << endl

<<"CatOne weight: "<< CatOne.GetWeight() << endl

<<"CatTwo age: "<< CatTwo.GetAge() << endl

<<"CatTwo weight: "<< CatTwo.GetWeight() << endl

<<"CatThree age: "<< CatThree.GetAge() << endl

<<"CatThree weight: "<< CatThree.GetWeight() << endl << endl;

CatThree = CatOne + CatTwo;

cout <<"\nCatOne age: "<< CatOne.GetAge() << endl

<<"CatOne weight: "<< CatOne.GetWeight() << endl

<<"CatTwo age: "<< CatTwo.GetAge() << endl

<<"CatTwo weight: "<< CatTwo.GetWeight() << endl

<<"CatThree age: "<< CatThree.GetAge() << endl

<<"CatThree weight: "<< CatThree.GetWeight() << endl << endl;


return EXIT_SUCCESS;

}


//Kimenet:

Konstruktor2

Konstruktor2

konstruktor


CatOne age: 2

CatOne weight: 3

CatTwo age: 4

CatTwo weight: 6

CatThree age: 0

CatThree weight: 0


operator+

Konstruktor2

operator=

Copy konstruktor /*Ezt nem értem,hogy itt miért hívódik meg a másoló konstruktor */

Destruktor

Destruktor


CatOne age: 2

CatOne weight: 3

CatTwo age: 4

CatTwo weight: 6

CatThree age: 6

CatThree weight: 9


Destruktor

Destruktor

Destruktor

2012. ápr. 2. 20:16
 9/18 anonim ***** válasza:
Mert értékül adod egy másiknak. (Ha jól látom, bár elég kusza így a kód, de az az oldal hibája...)
2012. ápr. 2. 20:31
Hasznos számodra ez a válasz?
 10/18 A kérdező kommentje:

Részletesebben valaki.

Mert így nem értem.

2012. ápr. 2. 20:49
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!