Mire jó az operator=?
Annyit tudok,hogy ez hívódik meg amikor :
CatOne = CatTwo;
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?)
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.
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.
Ez igaz, amíg egy valami nem tiszta, ne menj tovább!
Kicsit vissza kéne lépned a könyvben.
//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
Részletesebben valaki.
Mert így nem értem.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!