С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Fantom.AS
2 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 121
#1

Переопределение operator [][] - C++

19.12.2011, 06:54. Просмотров 1296. Ответов 20
Метки нет (Все метки)

Пишу свой класс матрица. Необходимо получать доступ к элементу матрицы.

Пробую переопределить оператор [][] обычным образом, но не получается.
Есть ли еще возможность получить доступ к элементу матрицы через [][]?

написал функцию double Element(int i,int j) {return Matr[i][j];}, но она меня не устраивает....
как быть?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2011, 06:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переопределение operator [][] (C++):

переопределение operator[] - C++
я унаследовался вот так: template <class TKey, class TData> class fixedSizeCache: public std::map<TKey, stCache<TData>> { ...

Глобальное переопределение "operator <<" для char * - C++
Здравствуйте. Привожу пример для демонстрации проблемы. Помогите пожалуйста в ее устранении или нивелировании. std::ostream&amp;...

Class & operator's |Error: undefined reference to operator - C++
Компилирует нормально, но когда хочу использовать оператор выдает ошибку:undefined reference to 'operator..(Fraction const&amp;, Fraction...

Вызов operator[] через operator[] const - C++
Перелистывал Майерса, наткнулся на код, подскажите пожалуйста почему он советует закомментированный вариант кода, не проще сделать как...

operator char() или operator int() - C++
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги Страуструпа, там он описывает класс String в нем есть ...

Реализация operator + через operator += - C++
внутри следующей темы возник вопрос, ответ на который так и не был получен: ...

20
Fantom.AS
2 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 121
19.12.2011, 18:35  [ТС] #16
хех... я от этого как раз и уйти пытаюсь...
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.12.2011, 18:37 #17
Цитата Сообщение от Fantom.AS Посмотреть сообщение
хех... я от этого как раз и уйти пытаюсь...
по другому ни как
0
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,864
19.12.2011, 19:29 #18
Цитата Сообщение от Jupiter Посмотреть сообщение
по другому ни как
Если нельзя, но очень хочется - значит можно!
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <cassert>
    
class Matrix {
    class Row {
        int * arr;
        int siz;
        Row(const Row & another);
        Row& operator = (const Row & another);
    public:
        Row(int size) : siz(size) {
            arr = new int [ siz ];
        }
        int& operator [] (int pos) {
            assert( pos > -1 && pos < siz );
            return arr[pos];
        }
        ~Row() {
            delete [] arr;
        }
    };
    Row ** matr;
    int rows;
    int columns;
 
    Matrix(const Matrix & another);
    Matrix& operator = (const Matrix & another);
    
public:
    Matrix(int r, int c) : rows(r), columns(c) {
        assert( rows > 0 && columns > 0 );
        
        matr = new Row* [ rows ];
        for ( int i = 0; i < rows; ++i )
            matr[i] = new Row(columns);
    }
    Row & operator [] (int pos) {
        assert( pos > -1 && pos < rows);
        
        return *(matr[pos]);
    }
    ~Matrix() {
        for ( int i = 0; i < rows; ++i )
            delete matr[i];
        delete [] matr;
    }
};
 
 
int main(){
    Matrix m(2, 2);
    m[0][0] = 13;
    m[1][1] = 69;
    
    std::cout << m[0][0] << " " << m[1][1] << std::endl;
    
    return 0;
}
На самом деле так, конечно, лучше не делать (вернее этого мало, всё должно быть чуть сложнее). Честно говоря, сам не верил, что отработает...
Код
andrew@rd-andrew ~/cpp/classes
$ g++ -o simple_matrix simple_matrix.cpp

andrew@rd-andrew ~/cpp/classes
$ ./simple_matrix
13 69

Не по теме:

Цитата Сообщение от Bers Посмотреть сообщение
будит легко
Легко не будет! Снова карточки давать за безграмотность?

1
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.12.2011, 19:32 #19
easybudda, не вижу принципиального отличия от
0
easybudda
Модератор
Эксперт CЭксперт С++
9698 / 5648 / 964
Регистрация: 25.07.2009
Сообщений: 10,864
19.12.2011, 19:49 #20
Цитата Сообщение от Jupiter Посмотреть сообщение
не вижу принципиального отличия
А попробуйте всю строку оптом заменить - не выйдет. У меня Row - закрытый класс. Вызывать его методы получится, а вот мутить что-то с переменными этого типа не так просто...
2
Fantom.AS
2 / 1 / 0
Регистрация: 17.11.2010
Сообщений: 121
20.12.2011, 14:45  [ТС] #21
Замудренно, но идея мне нравится)
0
20.12.2011, 14:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2011, 14:45
Привет! Вот еще темы с ответами:

Перегрузить операторы operator+() и operator*() в пользовательском классе "Комплексное число" - C++
Здравствуйте. Предлагаю заняться арифметикой. Создал прослейший класс, перегрузил операторы сложения и умножения, в конструкторе...

Operator +, operator += — какой через какой реализовывать? - C++
Для class Fraction { // ... public: Fraction operator + ( const Fraction&amp; right ) const; Fraction&amp; operator += ( const...

Чем "operator *=" отличается от "operator *"? - C++
снова застряла, не могу понять, чем этот оператор должен отличаться от оператора*.....? вот он, но это работает только в случае...

Expected init-declarator before "operator".expected `,' or `;' before "operator" - C++
Пример не мой. Пытаюсь у себя запустить и чтото неполучается. Ошибка на строке 24 Expected init-declarator before &quot;operator&quot;.Expected...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.