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

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

Войти
Регистрация
Восстановить пароль
 
LeX
231 / 231 / 59
Регистрация: 30.06.2010
Сообщений: 858
#1

вопрос на засыпку, возможно ли? - C++

23.03.2011, 17:10. Просмотров 351. Ответов 4
Метки нет (Все метки)

возможно ли каким либо образом перегрузить оператор [] в собственном классе что бы были возможны следующие конструкции:

C++
1
2
3
4
5
MyClass v;//или MyClass v[<размер>];
v[10]=3;
v[4]=35.6;
v[4.5]="sdfas";
v["dfg"]=432;
то есть что бы индекс был любого типа и значение элемента такого массива тоже было любого типа?

я как то поэкспериментировал с указателем void*(в реализации), получилось следующее:
C++
1
2
3
4
5
6
v["cg"]="buba";
v[1]=(void*)2;//тут хотелось бы без явного указания void*
//без него ругается что не может привести int к void*
v[2]="mars";
v["gr"]=(void*)4;
printf("%s\n%d\n%s\n%d", v["cg"], v[1], v[2], v["gr"]);
вывод работает. все нормально. как избавится от void*? перегрузкой оператора =?

оператор [] возвращает указатель на void* поле, куда записывается значение. строки проходят, числа-нет
а числа типа float и double вообще не удается привести к void*(ну и черт с ними)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.03.2011, 17:10     вопрос на засыпку, возможно ли?
Посмотрите здесь:

На засыпку для новичков: в функции передаётся один параметр, а его значения разные; почему? - C++
#include &lt;stdio.h&gt; //Тут некоторый код void foo(X* pX) {printf (&quot;%x\n&quot;, pX);}; void bar(Y* pY) {printf (&quot;%x\n&quot;, pY);}; int...

Возможно ли? - C++
Доброго времени суток! Есть несколько вопросов: 1.Возможно ли в консольном приложении, послать системе сообщение, которая...

А возможно ли? - C++
Перейду сразу к вопросу. Вопрос: Возможно ли реализовать клиент-серверное приложение, и допустим я с сервера отправляю что-то клиенту и...

возможно ли? - C++
Нужно написать программу которая при запуске ПК отправляла смс! Нужно для слежки за своим компом. Возможно ли такое? Заранее спасибо...

Возможно ли так ? - C++
Нужен ваш совет. Правилен ли следующий код, и корректен ли будет указатель на массив ? WORD* Index; Index = new WORD ; for...

Возможно ли так?) - C++
Вот осваиваюсь с классами и конструкторами: class pen{ private: int marka, zvet, ves, gelevaya,dlinna, col; float cost; ...

Возможно ли это на с++? - C++
Допустим есть класс class MyBool{ int data; //Читаем бит номер num bool GetVal(num){return data&amp;(1&lt;&lt;num);} //Записываем в бит...

Возможно ли разменять 25 р - C++
Возможно ли разменять 25 р десятью купюрами номиналом в 1;3; и 5 р?

Возможно-ли упростить код? - C++
При выполнении хотя бы одного условия равенства, вывести только один из двух равных элементов. На выходе: b и три элемента из c, c, d, d. ...

Возможно дело в цикле - C++
Задачка: Программа должна отображать меню из четырех пунктов, каждый из них помечен буквой. Если пользователь вводит букву, отличающуюся от...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LeX
231 / 231 / 59
Регистрация: 30.06.2010
Сообщений: 858
23.03.2011, 17:18  [ТС]     вопрос на засыпку, возможно ли? #2
Saiberg, ладно, приведите объявление перегрузок в классе(реализую уж сам), что бы можно было реализовать:
C++
1
2
3
v["fsdf"]=1;
v["fd"]=345.567;
v["as"]="rgsdf";
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,444
23.03.2011, 17:27     вопрос на засыпку, возможно ли? #3
LeX BB, возможно, если тип индекса массива и тип элемента массива будет некоторого класса Variant, который, в свою очередь, может хранить значения различных типов. Реализуется все это через объединение (union) переменных различных типов и тега, который будет представлять информацию о том, переменная какого типа в данный момент хранится в объекте типа Variant.
Пример класса variant, который может хранить значения типа double и char: http://www.cyberforum.ru/cpp-beginne...ml#post1368871. Можешь взять его и расширить под свои нужды.
Если не секрет, зачем подобные извращения понадобились?
LeX
231 / 231 / 59
Регистрация: 30.06.2010
Сообщений: 858
23.03.2011, 17:34  [ТС]     вопрос на засыпку, возможно ли? #4
Nameless One, спасибо, попробую поработать с union
ну такради интереса, получится, нет
KuKu
1556 / 1034 / 76
Регистрация: 17.04.2009
Сообщений: 2,974
23.03.2011, 17:52     вопрос на засыпку, возможно ли? #5
C++
1
2
3
4
5
6
7
8
    int operator[](int i)
    {
        return(i);   
    }
    const char* operator[](const char* b)
    {
        return(b);
    }
А перегрузка оператора то не айс ? или мы не ищем легких путей ...

Добавлено через 2 минуты
а .. понял в чем подвох
Yandex
Объявления
23.03.2011, 17:52     вопрос на засыпку, возможно ли?
Ответ Создать тему
Опции темы

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