Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
#1

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

24.03.2013, 23:25. Просмотров 296. Ответов 5
Метки нет (Все метки)

я унаследовался вот так:
C++
1
2
3
4
5
6
7
8
9
template <class TKey, class TData>
class fixedSizeCache: public std::map<TKey, stCache<TData>>
{
 
private:
 
    typedef std::map<TKey, stCache<TData>> TMap;
 
...

переопределяю оператор[], в нем использую функции стандартного [] от std::map и кое что добавляю от себя.

суть в том - как мне вызвать старый оператор [], класса от которого я унаследовался.

я пока делаю так:
C++
1
if (this->TMap::operator [](key).n == 0)
может кто знает как можно короче записать?? а то как-то ужасно выглядит.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2013, 23:25     переопределение operator[]
Посмотрите здесь:

C++ operator++
operator< C++
C++ Переопределение operator [][]
C++ operator=
Operator>> C++
operator >> C++
C++ Operator*=();
C++ Operator=
Глобальное переопределение "operator <<" для char * C++
C++ Operator +
C++ Operator*
C++ Вызов operator[] через operator[] const

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1242 / 991 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
24.03.2013, 23:39     переопределение operator[] #2
Неа, только так. Разве что this-> можно выкинуть.

Ещё (более правильный) вариант: композиция вместо наследования.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
24.03.2013, 23:46  [ТС]     переопределение operator[] #3
OhMyGodSoLong, вы не зная цели не можете так говорить - что более правильно

у меня есть первоначальный вариант с композицией. и вроде работает. но есть проблема. я не знаю, как переопределить функции итераторов для своего класса. он должен повторять std map.
C++
1
TMap::iterator fixedSizeCache::begin() { return my_map.begin(); }
ругается, что-то вроде TMap::iterator - не является типом.

да и в конце концов переопределять мне тогда придется все функции! а так только парочку. вы как считаете?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1242 / 991 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
24.03.2013, 23:52     переопределение operator[] #4
C++
1
typename TMap::iterator fixedSizeCache::begin() { return my_map.begin(); }
Цитата Сообщение от OstapBender Посмотреть сообщение
да и в конце концов переопределять мне тогда придется все функции! а так только парочку. вы как считаете?
Я считаю, что 1) кеш не является ассоциативным массивом, поэтому делать его наследником ассоциативного массива как-то странно, 2) пользователю кеша глубоко по барабану, сколько и чего вам там придётся переопределять, да и вы точно уверены, что вам надо совсем всё? 3) если вы переопределите кучу методов, это не скажется на производительности, так как инлайнинг.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
24.03.2013, 23:58     переопределение operator[] #5
вы не зная цели не можете так говорить - что более правильно
Бред. Наследование от стандартных классов в основном не является нормальным вариантом, а уж public наследование тем более ( если уж наследование - лучше использовать private или уж композицию). Есть некие принципы, которые желательно соблюдать и стоит их не соблюдать только в том случае, если знаешь для чего это делаешь и какие из этого риски.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
25.03.2013, 00:07  [ТС]     переопределение operator[] #6
OhMyGodSoLong, мда я нуб) спасибо!
по 2 и 3 пунктам точно согласен. просто переопределять то лениво.

буду пробовать доделать с композицией.

ForEveR, не пеняй, я объект-ориентированно не писал очень давно)
Yandex
Объявления
25.03.2013, 00:07     переопределение operator[]
Ответ Создать тему
Опции темы

Текущее время: 14:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru