Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przęciążanie operatora []

Ostatnio zmodyfikowano 2013-07-26 14:14
Autor Wiadomość
Szymko
Temat założony przez niniejszego użytkownika
Przęciążanie operatora []
» 2013-07-26 00:41:13
Otóż tak, chciałem zrobić opakowanie tablicy dwuwymiarowej np. takie:
C/C++
class CFoo
{
public:
    // ...konstruktory, metody itp.
private:
    // ...pola itp.
    int tablica[ 10 ][ 10 ];
}
O ile wiem jak przeciążyć operator [] w przypadku gdyby tablica była jednowymiarowa to za nic nie mogę wymyślić jak to zrobić dla dwuwymiarowej, albo i wielowymiarowej. Chciałem żeby do opakowania można było się odnosić np. tak:
C/C++
CFoo Opakowanie;
opakowanie[ 3 ][ 5 ] = //coś tam
P-88806
Admixior
» 2013-07-26 00:56:01
Niech operator [] zwraca wskaźnik na tablice jednowymiarową
C/C++
int * operator []( int x )
{
    return tablica[ x ];
}
P-88809
Szymko
Temat założony przez niniejszego użytkownika
» 2013-07-26 01:22:36
No faktycznie, tylko, że wtedy nie zabezpieczę tej tablicy jednowymiarowej, zwracanej przez operator przed błędem przekroczenia indeksu.
P-88811
Matix8741
» 2013-07-26 10:06:53
Bo operator [] jest tylko i wyłącznie dwuargumentowy, jest tylko jeden operator który może przyjąć więcej argumentów i jest to operator (), więc tablice wielowymiarową może zrobić tak
obiekt klasy( 4, 5, 2 )
P-88817
jsc
» 2013-07-26 10:40:50
Możesz ten pomysł z () szerzej omówić?
P-88818
Matix8741
» 2013-07-26 11:05:30
Robisz przeładowanie operatora () w taki sam sposób jak operatora [] tylko z wieloma argumentami np. jako funkcję składową klasy:
C/C++
int & operator ()( unsigned int jeden, unsigned int dwa, unsigned int trzy )
{
    return a[ jeden ][ dwa ][ trzy ];
}
Chyba dobrze napisałem bo sam tego nie używałem, ale jest to omówione w "symfonii c++ Standard" Jerzego Grębosza.
możesz nawet użyć argumentów domniemanych ;)
P-88821
Szymko
Temat założony przez niniejszego użytkownika
» 2013-07-26 14:14:26
Ok, dzięki wielkie. To mi wystarczy.
P-88831
« 1 »
  Strona 1 z 1