Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

24.03.2013, 23:25. Просмотров 325. Ответов 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)
может кто знает как можно короче записать?? а то как-то ужасно выглядит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2013, 23:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос переопределение operator[] (C++):

Переопределение operator [][] - C++
Пишу свой класс матрица. Необходимо получать доступ к элементу матрицы. Пробую переопределить оператор обычным образом, но не ...

Глобальное переопределение "operator <<" для char * - C++
Здравствуйте. Привожу пример для демонстрации проблемы. Помогите пожалуйста в ее устранении или нивелировании. std::ostream&amp;...

Class & operator's |Error: undefined reference to operator - C++
Компилирует нормально, но когда хочу использовать оператор выдает ошибку:undefined reference to 'operator..(Fraction const&amp;, Fraction...

Вызов operator[] через operator[] const - C++
Перелистывал Майерса, наткнулся на код, подскажите пожалуйста почему он советует закомментированный вариант кода, не проще сделать как...

operator char() или operator int() - C++
Здорова госпдо! Снова ничо не ясно как всегда. Разбираю программку из книги Страуструпа, там он описывает класс String в нем есть ...

Реализация operator + через operator += - C++
внутри следующей темы возник вопрос, ответ на который так и не был получен: ...

5
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
24.03.2013, 23:39 #2
Неа, только так. Разве что this-> можно выкинуть.

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

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

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

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

ForEveR, не пеняй, я объект-ориентированно не писал очень давно)
0
25.03.2013, 00:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.03.2013, 00:07
Привет! Вот еще темы с ответами:

Перегрузить операторы operator+() и operator*() в пользовательском классе "Комплексное число" - C++
Здравствуйте. Предлагаю заняться арифметикой. Создал прослейший класс, перегрузил операторы сложения и умножения, в конструкторе...

Operator +, operator += — какой через какой реализовывать? - C++
Для class Fraction { // ... public: Fraction operator + ( const Fraction&amp; right ) const; Fraction&amp; operator += ( const...

Чем "operator *=" отличается от "operator *"? - C++
снова застряла, не могу понять, чем этот оператор должен отличаться от оператора*.....? вот он, но это работает только в случае...

Expected init-declarator before "operator".expected `,' or `;' before "operator" - C++
Пример не мой. Пытаюсь у себя запустить и чтото неполучается. Ошибка на строке 24 Expected init-declarator before &quot;operator&quot;.Expected...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.