RezaMedlem sedan feb. 2001107 inlägg Vad är anledningen till att den överlagrade operatorn = inte används i samband med att den överlagrade indexerings operatorn används ?
class Counter
{
public:
Counter();
Counter(int antal);
int& operator\[\](int ant);
Counter& operator=(Counter& rhs) { return \*this }
private:
int *itsVal;
};
Counter::Counter()
{
itsVal = new int[1];
}
Counter::Counter(int antal)
{
itsVal = new int[antal];
}
int& Counter::operator[](int ant)
{
return itsVal[ant];
}
int main()
{
Counter i(3);
Counter j(3);
i\[0\] = 100;
j\[0\] = 200;
i\[0\] = j\[0\]; // Anropar inte den överlagrade =
}
------------------
Reza K
[Redigerat av Reza den 11 nov 2001]
UlfTMedlem sedan maj 20018 027 inlägg Jag ser inte ens att du har överlagrat =. Hittar i alla fall ingen operator=()-funktion.
RezaMedlem sedan feb. 2001107 inlägg Jag ber om ursäkt, jag hade glömt att placera ut deklarationen av överlagringen =.
------------------
Reza K
BeatboxMedlem sedan okt. 20013 217 inlägg Precis vad jag satt och tänkte på också. Sedan är det ju skilland på dessa operatorer också. Ena fallet vill man göra nått speciellt vid indexering och den andra är ju tilldelning.
i[0] = 100;
Detta hade ju också resulterat i att tilldelingsoperatorn anropats om den fanns överlagrad i klassen.
// BeatBox
------------------
"Mörkrets gärningar, förekommer även på dagen"
Sixten Landby
RezaMedlem sedan feb. 2001107 inlägg Tilldelnings operatorn finns överlagrat i klassen, men anropas inte, verken med:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
i[0] = 100;
eller
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
i[0] = j[0];
------------------
Reza K
netfeedMedlem sedan mars 2001593 inlägg int main()
{
return 0;
}
lol ;)
------------------
Look Out!
The Tarntula Is Comming
UlfTMedlem sedan maj 20018 027 inlägg Något som jag funderar på är att operator[] returnerar en referens till en int. Men det är ju en Counter som har operator=. Alltså, först anropar du operator[]. Då får du en int. Och int har ju ingen överlagrad =. Därför anropas inte operator=. Hade operator[] returnerat en Counter kanske det hade funkat.
RezaMedlem sedan feb. 2001107 inlägg UlfT du har nog helt rätt.
Tack för hjälpen.
------------------
Reza K
Vad du verkar vara en JÄTTEdålig programmerare du REZA!!! ;)