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

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

Восстановить пароль Регистрация
 
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
24.03.2013, 23:25     переопределение operator[] #1
я унаследовался вот так:
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
C++ Переопределение operator [][]
C++ переопределение
C++ operator=
operator char() или operator int() C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 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
1234 / 983 / 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
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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[]
Ответ Создать тему
Опции темы

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