C/C++ Урок 40. Иммитация перегрузки [][]
На прошлом уроке мы с вами перегрузили оператор [], который позволяет обращаться с экземпляром вашего класса как с одномерным массивом. На этом уроке мы с вами посмотрим, как можно обращаться с экземпляром класса как двумерным массивом.
Проблема тут в том, что оператора [][] просто нет. А раз его нет, то и перегрузить его нельзя. Но мы поступим вот как: в нашем классе мы создадим внутренний класс, в котором перегрузим оператор []. И в самом нашем классе (не во внутреннем) мы тоже перегрузим []. Тогда мы и сможем использовать [][] для экземпляра нашего класса.
Вот непосредственно код:
#include <iostream.h>
class CMyClass{
// Внутренний класс.
class CInnerClass{
int m_arr[3];
public:
// Перегрузка оператора [].
int &operator [](int index){
return m_arr[index];
}
};
CInnerClass m_arr[2];
public:
// Перегрузка оператора [].
CInnerClass & operator [](int index){
return m_arr[index];
}
};
void main(){
CMyClass w;
w[1][2] = 22;
cout<<w[1][2]<<"\n";
}
Выведет эта программа, естественно, 22.
|