Двумерный массив в C ++ / Компилятор / Перегрузка

0

На самом деле у меня вопрос о двумерных массивах в C++. Первый вопрос заключается в том, как компилятор интерпретирует двумерный массив с разницей в "нормальном" одномерном массиве. Затем мне нужно реализовать перегрузку оператора для двухмерных массивов.

Это перегруженный оператор для нормального массива:

const float& Matrix::operator[] (int index) const
{
    const float& value = this->m[index];
    return value;
}

Это перегруженный оператор для двухмерного массива:

const float& Matrix::operator[][](int index, int ndIndex) const
{
    const float& value = this->m[index][ndIndex];
    return value;
}

Это теоретическая правильная реализация для перегрузки оператора [] []?

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

Все эти вопросы являются теоретическими, поэтому мне не нужен настоящий код, просто контекст "за сценой" и схема прокси-шаблона.

Было бы здорово, если бы вы могли мне помочь! Заранее спасибо!!

Теги:
arrays
multidimensional-array
proxy
design-patterns

2 ответа

1

В C++ нет operator[][] C++. Вам не нужен фантастический прокси, просто перегрузите operator[] и заставьте его вернуть массив (который соответствует строке). В некотором смысле, это прокси (массив, который вы возвращаете)

Что-то вроде:

float* Matrix::operator[](int row) // non-const version
{
    return m[row];
}

а также

const float* Matrix::operator[](int row) const // const overload
{
    return m[row];
}
  • 0
    Правильно ли я считаю, что первый разрешен для записи, а второй только для чтения?
  • 1
    Да исправить. Второй должен использоваться для доступа к const (т.е. с const ссылками и т. Д.).
0

(В следующий раз задайте 2 вопроса, если у вас есть 2 вопроса. SO is free.)

Чтобы прояснить вторую часть вопроса, объект Proxy - это объект, который обозначает строку 2D-массива. Он возвращается оператором первого уровня operator[], а сам прокси реализует второй operator[].

Ещё вопросы

Сообщество Overcoder
Наверх
Меню