> int pop(void) {iTop-; return a[iTop+1];}
> // Две функции доступа к элементам массива
> int& getat (int _i){return a[_i];}
> int& operator[](int _i){return a[_i];}
>};
>// проверим наши рассуждения
>CArray c;
>int main() {
> c.add(1);
> c.add(2);
> c.add(3);
> c.add(4);
> c.add(5);
> c.getat(3) = 10;
> c[2]=20;
> return 1;
>}
Разумеется, я пропустил ВСЕ детали, и важные и мелкие, но это не главное. Самое главное - последние две функции декларации.
Надеюсь, Вы понимаете значение сделанного? Вы снова Властелин. Allmighty God. А как же? Вы полностью контролируете все и всех. Как назвать того, кто издает законы, по которым живут все без исключения? Творения которого рождаются и умирают лишь по воле его? Нарушившего закон его постигает немедленная и неотвратимая кара? (Да-да, именно, как у Буча там: "сервер, не выполняющий… инварианты Господа нашего…" ой нет, не было такого, но он имел в виду!)
Практически Вы можете проверять значение индекса не меньше 0 и не больше iTop. Можете вместо массива положить указатель на массив int** a, тогда в operator[] возвращать нужно не int& а int*& - а вести себя будет точно так же. Можете вообще читать с диска или с бараньей лопатки. Более того (и это кстати очень важно) перегрузить operator[] не только для int но и чего угодно другого: для строки, float и всего остального, и не один раз. Есть ограничение правда - аргумент может быть только один. Ха, смешные потуги жалкого компилятора, нас уже не остановить:
>// Это класс, объединяющий пару аргументов
>class pair {
>public:
> int x; int y;
> pair(int _x=0, int _y=0):x(_x), y(_y)р {}
>};
>// Перегруженный operator[]
>int& operator[](pair);
>//использование.
>OurArray[pair(1,2)].OurFunction();
Тормознем немного. Королева в восхищении, но… есть немного проблем.