Przeciążenie operatora []

0

Witam, mam "mały" problem z przeciążaniem operatorów. Mianowicie nie przeciążają się.

class Board
{
private:
    Field * fields[8][8];
public:
    Board();
    Field * operator[](const string & position) const;
};

//cpp
Field * Board::operator[](const string & position) const
{
    //jakies poprawne dzialania 
    return fields[i][k];
}

Gdy zechcę się odwołać w ten sposób:

board["a2"]

To nie działa. Natomiast działa gdy napiszę:

board->operator[]("a2") //czyli tak jak w przypadku zwykłej metody

Co poradzić?

1
board->operator[]("a2")

Z tego wychodzi że używasz swojego operatora na Field* a nie Field - tak nie zadziała (bo operator [] dla wskaźników działa inaczej).

Musisz zrobić coś w rodzaju:

(*board)["a2"]
0

Intrygujące ;> Gdzie mogę o tym poczytać (o konkretnie tym kruczku, nie ogólnie o przeciążeniu operatorów)?

2

Ale to przecież nie jest żaden kruczek, tylko twój brak zrozumienia podstaw składni języka. Przeładowując operator dla pewnej klasy przeładowujesz go dla OBIEKTÓW tej klasy. Więc napisanie obiekt[cośtam] wywoła twój przeładowany operator. Ty u siebie w kodzie masz wskaźnik, czyli zmienną liczbową która przechowuje adres obiektu. Żeby użyć twojego operatora musisz z tego adresu wyciągnąć obiekt czyli zrobić *wskaźnik.
Standardowo zapis wskaznik[liczba] to jest to samo co *(wskaznik+liczba) czyli próba odczytania obiektu oddalonego w pamięci o sizeof(obiekt)*liczba od adresu zapisanego we wskaznik.

1 użytkowników online, w tym zalogowanych: 0, gości: 1