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

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

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

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

24.03.2013, 23:25. Просмотров 306. Ответов 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[]
Посмотрите здесь:

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

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

переопределение - C++
Необходимо реализовать класс Stack, соответствующий стеку чисел. Для хранения стека внутри класса используется массив. Размер массива...

operator >> - C++
// 1.h #ifndef STONEWT_H_ #define STONEWT_H_ using std::cout; using std::cin; using std::endl; class Stonewt { private: ...

operator() - C++
Здраваствуйте. Объясните пожалуйста смысл &quot;opereator()&quot; во всех случаях, что он делает, почему иногда впереди него ставится &quot;&amp;&quot;...

operator[] - C++
class A { public: A(){} prvate: int _m; }; Как перегрузить оператор , что бы можно было написать

operator= - C++
Такой вопрос. Есть объект. Хочу чтобы при присваивании его к чеслу выдавалось число. Например. class MyClass { short...

Operator* - C++
в этой программе мне надо умножить два числа a &amp; b ??? допустим в ob(2,5) перемножить 2 &amp; 5 #include&lt;iostream&gt; #include&lt;vector&gt; ...

Operator*=(); - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace::std; class Distance //Класс английских длин { ...

Operator + - C++
Создайте в классе Circle оператор + для сложения объектов типа Circle. Необходимо складывать только величины радиусов itsRadius. ...


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

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

Ещё (более правильный) вариант: композиция вместо наследования.
OstapBender
583 / 521 / 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
~ Эврика! ~
1243 / 992 / 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
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
24.03.2013, 23:58     переопределение operator[] #5
вы не зная цели не можете так говорить - что более правильно
Бред. Наследование от стандартных классов в основном не является нормальным вариантом, а уж public наследование тем более ( если уж наследование - лучше использовать private или уж композицию). Есть некие принципы, которые желательно соблюдать и стоит их не соблюдать только в том случае, если знаешь для чего это делаешь и какие из этого риски.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
25.03.2013, 00:07  [ТС]     переопределение operator[] #6
OhMyGodSoLong, мда я нуб) спасибо!
по 2 и 3 пунктам точно согласен. просто переопределять то лениво.

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

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

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