Я точно работаю над классом матрицы, и я решил сначала создать класс Array, который имеет динамический двумерный массив.Итак, как и вы, я столкнулся с этим препятствием: я могу перегрузить две квадратные скобки.Как я подошел к этому делу очень просто;Я перегружал оператор квадратных скобок дважды как функции-члены.Сначала я перегрузил [], чтобы вернуть, так сказать, указатель, указывающий на нужную строку, а затем следующая функция-член (то есть снова перегруженный оператор []) возвращает значение l того же типа, что и элементы массива.*
Однако обратите внимание, что индекс, который вы вызываете для вызова предыдущего перегруженного оператора [], должен быть где-то сохранен, чтобы вы могли использовать его в последнем перегруженном операторе [].По этой причине я просто добавил новый член типа int в класс Array (который я назвал «test» в моем коде ниже).
class Array {
private:
double **ptr; int test;
... /* the rest of the members includes the number of rows and columns */
public:
Array(int=3,int=3); // Constructor
Array(Array &); // Copy Constructor
~Array(); // Destructor
void get_array();
void show_array();
double* operator[] (int);
double operator[] (short int);
...
};
...
double* Array::operator[] (int a) {
test = a;
double* p = ptr[test];
return p;
}
double Array::operator[] (short int b) {
return ((*this)[test][b]);
}
Для этого, например, в mainЯ могу просто написать:
int main(){
Array example;
cout << example[1][2];
}
Надеюсь, это поможет вам.