![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Trurl |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
Подскажите, пожалуйста, возможно ли создать в С++ такой класс, чтобы было возможно менять у него количество переменных?
Конкретно, я пытаюсь создать класс для графа, чтобы была возможность добавлять в него вершины и дуги в произвольном количестве. С уважением. |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Trurl, лучше всего, это сделать через наследование...
Но по сути, тебе никто не мешает держать внутри класса std::vector с нужным количеством переменных. |
|||
|
||||
| Walker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 363 Регистрация: 23.10.2006 Репутация: 1 Всего: 16 |
Кажется, Вы путаете понятие класса (тип) и объекта класса.
Создайте классы Вершина, Дуга, а затем создавайте объекты в каком угодно количестве и размещайте их в классе граф например в динамических коллекциях. -------------------- "От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..." |
|||
|
||||
| Trurl |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
Спасибо.
Подскажите, что такое "динамическая коллекция" и как её сотворить? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Никогда не слышал такого термина. Лучше узнать у того, кто его употребил. |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
"динамическая коллекция" - это список, размер которого может меняться
можно написать самому, но лучше использовать готовые к примеру, std::vector, std::list и так далее Добавлено через 52 секунды bsa, думаю, это не термин а название |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
||||
|
||||
| Andrey44 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1501 Регистрация: 4.12.2006 Где: На работе Репутация: 2 Всего: 26 |
-------------------- ????? ??, ??????? ?????. |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
как вариант - использовать map, в качестве ключа можно использовать строку с названием переменной, в качестве значения - вариантный тип данных, например boost::variant, но добавлять придется каждому объекту класса по отдельности. Если действительно нужно добавлять переменные и методы объектам класса, то забудь про С++, используй языки программирования высокого уровня, например Python, там есть метаклассы, рефлексия и возможность добавлять к объекту новые аттрибуты и методы. |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
оффтоп
Lazin, думаю, Trurl не совсем того уровня, чтобы последовать твоему совету (если ошибся, извиняюсь) Это сообщение отредактировал(а) Alek86 - 11.12.2007, 14:42 |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
где-то читал статью, там автор предлагает добавлять такой map, что-бы потом проще было-бы добавлять новые атрибуты к классу. В этом есть один плюс, если значение с каким-то ключем не используется, то оно не хранится, например если есть класс - кнопка
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Lazin, все это здорово, если атрибуты имеют один тип, а если разные? В строках хранить? или вариант использовать? Тогда лучше сразу на Бейсике писать... Опять же, как их идентифицировать? По числовому ид-ру или по строке-имени? Нет уж спасибо... Лучше пусть хранятся ненужные с дефолтовскими значениями, авось не треснет память
Trurl, если нужен граф, посмотри в сторону boost graph library. Можно научится пользоваться BGL, а можно просто познакомиться с концепцией - чтобы понять, что нужно хотеть от графа, а не лепить горбатого. Сочинить удачный интерфейс для сложной динамической структуры, да еще без опыта - нереально. -------------------- ... |
|||
|
||||
| baldina |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
Trurl, при проектировании класса лучше всего начинать с интерфейса, т.е. с того, как класс будет использоваться. А уж после думать о реализации. Именно реализация определяет, какие именно члены класса понадобятся. Например: "Мне нужен класс, представляющий граф"
"Он должен иметь возможность добавлять произвольное число вершин и ребер." ---> "Понадобится представление для вершины и ребра". ---> "Ребро определяет связь между двумя вершинами"
Это не готовый интерфейс класса, это эскиз интерфейса как иллюстрация и результат размышлений. А вообще Earnest права, хорошие интерфейсы (да и реализацию) уже придумали (даже неоднократно), и в boost все весьма грамотно сделано. |
||||||
|
|||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |