−9°C
завтра: −11°C
Погода в Перми
−9°C
утром−12°C
днем−11°C
завтра−11°C
Подробно
 61,95
+0.1172
Курс USD ЦБ РФна 24 января
61,9515
+0.1172
 68,69
+0.1670
Курс EUR ЦБ РФна 24 января
68,6856
+0.1670
PRM.Форум /Компьютеры Интернет Связь / Программирование /

Переопределение операции индексирования

  • Народ подскажите как используя переопределние оперции идексирования организовать обращение к двумерному массиву.

    Необходимо создать контейнерный класс с точки зрения остальной программы работающий как двумерный массив

  • Если не ошибаюсь, то перегружаешь операцию индексирования [], которая возвращает адрес массива, в котором хранятся данные. Второй оператор возьмет элемент, отсчитав соответствующее их количество от возвращенного адреса. Т.е. перегруженный оператор как бы вернет адрес строки, а второй, неперегруженный возьмет из нее элемент.

  • если не секрет, о каком языке идет речь? ;)))

    впрочем, много где придется возвращать другой класс, возможно временный, со вторым индексером.

  • например, код на С++:

    #include

    template
    class Matrix
    {
    public:
    class IndexerHelper
    {
    public:
    Real & operator[]( int j ) { return m.data[i*M+j]; }
    private:
    friend class Matrix;
    IndexerHelper( Matrix & mm, int ii ) : i(ii), m(mm) {}
    Matrix & m;
    int i;
    };

    class ConstIndexerHelper
    {
    public:
    const Real & operator[]( int j ) const { return m.data[i*M+j]; }
    private:
    friend class Matrix;
    ConstIndexerHelper( const Matrix & mm, int ii ) : i(ii), m(mm) {}
    const Matrix & m;
    int i;
    };

    const ConstIndexerHelper operator[](int i) const { return ConstIndexerHelper( *this, i ); }
    IndexerHelper operator[](int i) { return IndexerHelper( *this, i ); }
    private:
    friend class IndexerHelper;
    Real data[N*M];
    };

    int main(int argc, char * argv[])
    {
    using namespace std;
    Matrix m;
    m[0][2] = 2;
    const Matrix & cm = m;
    cout

  • Спасибо, особенно за готовый кусок кода...
    Я уже разобрался...
    Извините, что не указал в первоначальном сообщении язык - конечно С++

Записей на странице:

Перейти в форум

Модератор: