Перегрузка operator[]

219
15 мая 2017, 01:10

Вот часть кода, помогите пожалуйста реализовать перегрузку оператора []

class Matrix
{
protected: 
    std::vector<std::vector<int> > Matr;
public:
    int* operator[](int n)
    {
        return Matr[n];     
    }
    Matrix(size_t n) : Matr(n, std::vector<int>(n))
    {
        if (n < 1)
        {
            throw Exception();
        }
    }
Answer 1

В вашем варианте логичнее

vector<int>& operator[](size_t i)
{
    return Matr[i];
}

и соответствующая константная версия

const vector<int>& operator[](size_t i) const
{
    return Matr[i];
}

Ну, и, возможно, дописать проверки на выход за пределы диапазона...

Если ну совершенно необходимо возвращать int*, то return &Matr[i][0];

Answer 2

Обычно этот оператор перегружается в виду двух функций для константного и не константного объектов. То есть обе функции следует включить в определение класса. Например,

std::vector<int> & operator[]( size_t n )
{
    return Matr[n];     
}
const std::vector<int> & operator[]( size_t n ) const
{
    return Matr[n];     
}
READ ALSO
Умножение в столбик

Умножение в столбик

Как написать оператор *= для длинных беззнаковых чисел методом умножения в столбик (длинная арифметика) без использования оператора *, если...

301
Проблема с компиляцией, С++, error 4

Проблема с компиляцией, С++, error 4

Есть проект на C++ при компиляции, которого при использование версии g++ (gcc) 49

282
Получить значение из функции

Получить значение из функции

Здравствуйте, подскажите , пожалуйста, ошибкуНе могу найти в чем проблема

318
SFML - C++ - Рисование фигуры из класса

SFML - C++ - Рисование фигуры из класса

Не могу нарисовать фигуру, которую создал в классеУ меня есть функция Main и класс Player

502