Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2010, 17:37   #1
L@m@k
 
Регистрация: 09.08.2010
Сообщений: 7
Стрелка динамическое изменение типа переменной

Всем привет, я только недавно начал вникать в азы программирования и сейчас, делая проект, столкнулся с такой проблемой, что не возникает никаких толковых идей, на подобный форум обращаюсь первый раз, надеюсь что мне помогут.
Суть проблемы следующая: у нас есть класс (attribute) у этого класса есть 2 переменных - первая это name типа String(очевидно что имя) и data неизвестного типа. Есть еще один класс (node) который в свою очередь содержит переменнтую attr такого вот типа std::list<attribute>. Как уже наверное стало ясно переменная attr является списком аттрибутов для каждого объекта node, но тип данных (переменной data) у каждого аттрибута может быть любой. Дак вот, в чем собственно проблема-то, в том, что нужно указать тип переменной data в классе attribute, и шаблоны тут использовать не получится это точно, я не знаю как эту проблему обойти так, чтобы это было не слишком затратно, а все происходило динамически в зависимости от ситуации. Как мне говорил друг, разработчики vc++ планируют ввести тип variable который будет принимать значения всех типов, это то что мне нужно, но пока этого не произошло и поэтому нужно как-то решать проблему! Надеюсь на вашу помощь.

Последний раз редактировалось L@m@k; 10.08.2010 в 10:55.
L@m@k вне форума Ответить с цитированием
Старый 09.08.2010, 22:11   #2
Lord Magnum
 
Регистрация: 20.12.2009
Сообщений: 4
По умолчанию

Переменная data инициализируется при создании обьекта?
Lord Magnum вне форума Ответить с цитированием
Старый 10.08.2010, 07:48   #3
L@m@k
 
Регистрация: 09.08.2010
Сообщений: 7
По умолчанию

да, она либо по умолчанию задается как string("") либо в зависимости от типа указанного в конструкторе, вот несколько способов как можно создать объект:
attribute A("A","qwerty");
attribute B("B",13);
attribute C("C",true);
attribute D("D",13.5);
........
в итоге у всех объектов есть лишь 1 переменнная data, только разных типов.
А и конструктор по умолчанию
attribute E;
тогда E.name будет=Default , а E.data будет=""

Последний раз редактировалось L@m@k; 10.08.2010 в 07:50.
L@m@k вне форума Ответить с цитированием
Старый 10.08.2010, 07:50   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Полиморфизм, не? А в классе работать с указателями.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 10.08.2010, 07:53   #5
L@m@k
 
Регистрация: 09.08.2010
Сообщений: 7
По умолчанию

кстате да, я немного неверно задал тип пераменной класса node, там скорее будет std::list<attribute*>, чтобы не создавать лишних копий, но сути проблемы это не меняет, а полиморфизм помойму тут не причем

появилась такая идея - использовать тип void* , но я плохо с ним знаком, может кто популярно изложить его основные моменты?

Последний раз редактировалось Stilet; 11.08.2010 в 07:34.
L@m@k вне форума Ответить с цитированием
Старый 11.08.2010, 07:19   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Точно полиморфмизм не нравится ?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 11.08.2010, 08:22   #7
L@m@k
 
Регистрация: 09.08.2010
Сообщений: 7
По умолчанию

ну а как вы хотите его сюда прилепить?
L@m@k вне форума Ответить с цитированием
Старый 11.08.2010, 08:36   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Код:
attribute A("A","qwerty");
attribute B("B",13);
attribute C("C",true);
attribute D("D",13.5);
Это же Ваш код?
Почему бы Вам не написать три функции, вместо одной?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 11.08.2010, 09:28   #9
L@m@k
 
Регистрация: 09.08.2010
Сообщений: 7
По умолчанию

Attribute - это конструкторы класса attribute, а не функции, я написал их, чтобы было более понятна моя цель. Это все разные конструкторы, тк тип второго параметра разный
L@m@k вне форума Ответить с цитированием
Старый 11.08.2010, 15:41   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну так у класса может быть много конструкторов, верно? И про полиморфизм читали?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое изменение даты AvivNoa Microsoft Office Word 34 03.06.2016 21:04
Изменение переменной Алексей_xXx Общие вопросы C/C++ 1 11.12.2009 10:49
Динамическое формирование имени переменной... Kvinto Общие вопросы Delphi 9 17.11.2009 17:56
Динамическое изменение местоположения БД в ADOCONNECTION Vol666 БД в Delphi 2 31.10.2009 07:21
Определение типа переменной Игорь007 Общие вопросы C/C++ 7 10.01.2009 13:01