Přetěžování operátoru [] – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Přetěžování operátoru [] – C / C++ – Fórum – Programujte.comPřetěžování operátoru [] – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Míša
~ Anonymní uživatel
105 příspěvků
15. 3. 2010   #1
-
0
-

Ahoj,

snažím se zjistit jak se přetěžujou operátory v C++ a zůstal jsem u jednoho problému. Jde mi o přetížení [] nějak takhle:

#include <iostream>


class ITEM
{
public:
int a, b, c;
ITEM()
{
this -> a = 1;
this -> b = 2;
this -> c = 3;
}
int operator[]( int i ) const
{
switch ( i )
{
case 1:
return (*this).a;
case 2:
return (*this).b;
case 3:
return (*this).c;
}
}
};

int main()
{
ITEM a;
std::cout << a[ 1 ];
system( "pause" );
return 0;
}


Ale nedaří se mi přijít na to jak ten operátor přetížit tak, abych mohl použít ukazatel, jde to takhle, ale to se mi nelíbí:

int main()

{
ITEM * a = ITEM();
std::cout << (*a)[ 1 ]; // tady ta dereference...
system( "pause" );
return 0;
}


Děkuji za rady... :)

Nahlásit jako SPAM
IP: 88.102.27.–
Reklama
Reklama
m->29+6
Super člen
15. 3. 2010   #2
-
0
-

Pamäť pre tú premennú sa musí alokovať

int main()

{
ITEM * a = new ITEM();
std::cout << (*a)[ 1 ]; // tady ta dereference...
delete a;
system( "pause" );
return 0;
}/code]

Nahlásit jako SPAM
IP: 147.229.208.–
Míša
~ Anonymní uživatel
105 příspěvků
15. 3. 2010   #3
-
0
-

To m->29 : to se omlouvám, mělo tam být new :)

Nahlásit jako SPAM
IP: 88.102.27.–
Míša
~ Anonymní uživatel
105 příspěvků
15. 3. 2010   #4
-
0
-

Jde mi o to, jestli se to dá přetížit tak aby se tam ta dereference nemusela pořád psát...

Nahlásit jako SPAM
IP: 88.102.27.–
mephi0
Expert
15. 3. 2010   #5
-
0
-

To Míša :

int main() 

{
ITEM a;
std::cout << a[ 1 ];
system( "pause" );
return 0;
}

Nahlásit jako SPAM
IP: 147.32.89.–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
Wizard0
Stálý člen
15. 3. 2010   #6
-
0
-

Pokial vytvaras ukazatel na objekt tak tam su dereferenciu pisat budes musiet vzdy.

Nahlásit jako SPAM
IP: 85.216.193.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 66 hostů

Podobná vlákna

Nefunguje přetěžování operátorů — založil Piskar10110010

Pretezovani staticke metody — založil Jenda

Přetížení operátoru ^ — založil TauWich

Moderátoři diskuze

 

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý