Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Возможно ли для класса сделать оператор "[][]"? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ как проверить нажатие "Enter" http://www.cyberforum.ru/cpp-beginners/thread1099622.html
Пользователь вводит поочередно значения какие то, хочу что бы при нажатии "Enter" цикл вырубался и программа работала дальше. Получить VK_RETURN через windows.h не получится, тк пишу на xcode(mac)....
C++ Страуструп - принципы и практика программирования. Ошибки компиляции При компиляции примеров из книги, 12 главы (графика), получаю ошибки: Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ "protected: void __thiscall Fl_Image::draw_empty(int,int)"... http://www.cyberforum.ru/cpp-beginners/thread1099620.html
C++ Знакомство с указателями. Синтаксическая ошибка.
Доброго дня! В качестве учебного пособия использую "С++ для чайников" Тема: первое знакомство с указателями С++, ст.89 //Layout - эта программа призвана дать читателю представление о...
Задать случайно массив, выводить является ли сумма делимой на 2 без остатка C++
помогите решить задачи в с++ 1) задать случайно массив от -20 до 50 с шагом 0.5, выводить является ли сумма делимой на 2 без остатка. 2)создать функцию, в качестве параметра получает массив и...
C++ Циклический сдвиг элементов квадратной матрицы http://www.cyberforum.ru/cpp-beginners/thread1099602.html
Осуществить циклический сдвиг элементов квадратной матрицы размерности MхN вправо на k элементов таким образом: элементы 1-й строки сдвигаются в последний столбец сверху вниз, из него в последнюю...
C++ Программа вроде компилируется,но значения не выводит Помогите пожалуйста!!Очень срочно.Программа вроде компилируется,но значения не выводит.В чем проблема? // 11.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h"... подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1638 / 1010 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
18.02.2014, 17:01
Пример не практический, потому что дублирует доступ к простому массиву, но как иллюстрация должен быть вполне очевиден.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class MyClass {
public:
    class Indexer {  // Сам индексатор, отвечающий за вторые скобки
    public:
        Indexer(MyClass& mc_, size_t index1_):
            mc(mc_),  // Запоминаем в индексаторе ссылку на родительский объект
            index1(index1_)  // и номер строки
        {}
         int& operator [] (size_t index2) {return mc.data[index1][index2];}
    private:
        MyClass& mc;
        const size_t index1;
    };
    friend class Indexer;   // Дадим ему доступ к внутренностям MyClass
 
    Indexer operator [] (size_t index1) {return Indexer(*this, index1);}  // Первые скобки
 
private:
    int data[20][20];
};
 
int main()
{
    MyClass x;
    x[3][4] = 5;  // Всю "шелуху" выкинет оптимизатор и эта операция будет скомпилирована в эквивалент x.data[3][4] = 5;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru