Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Правильное переопределение operator[]

1.8K
20 декабря 2009 года
Arkady
153 / / 18.12.2007
Добрый день,

Почему, допустим, пользуясь контейнером vector<type>, мы можем обращаться к i-ому элементу, используя оператор[] не только на чтение, но и на запись, но если я переопределяю этот оператор, то оно так уже не работает.
Код:
class Param
{
public:
 Param() {}
 Param(int newi) { i = newi; }

private:
 int i;
};

class Wrapper
{
 std::vector<Param> Parameters;
 Param operator[](unsigned i)
 {
    return Parameters;
 }
};

void Do()
{
Param P1, P2, P3, P4;
Wrapper.push_back(P1);
Wrapper.push_back(P2);
Wrapper.push_back(P3);
Wrapper[1] = P4;
}


Вот тут, в итоге враппер не будет состоять из P1 P4 и P3, а будет из P1, P2 и P3.
Как добиться того, чтобы массив был P1 P4 и P3?

Можно возвращать указатель
 
Код:
Param* operator[](unsigned i)
 {
    return &(Parameters);
 }

И тогда всё работает, но мне хочется, чтобы возвращался не указатель, а по значению. Возможно ли это?
11
20 декабря 2009 года
oxotnik333
2.9K / / 03.08.2007
возвращай ссылку[FONT=monospace]

 
Код:
[/FONT]Param& operator[](unsigned i)
 {
    return Parameters;
 }
1.8K
21 декабря 2009 года
Arkady
153 / / 18.12.2007
Цитата: oxotnik333
возвращай ссылку[FONT=monospace]

 
Код:
[/FONT]Param& operator[](unsigned i)
 {
    return Parameters;
 }



Как же я могу иногда тупить. Спасибо :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог