| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Классы с изменяемым количеством переменных/членов |
| Автор: Trurl 11.12.2007, 13:16 |
| Подскажите, пожалуйста, возможно ли создать в С++ такой класс, чтобы было возможно менять у него количество переменных? Конкретно, я пытаюсь создать класс для графа, чтобы была возможность добавлять в него вершины и дуги в произвольном количестве. С уважением. |
| Автор: bsa 11.12.2007, 13:19 |
| Trurl, лучше всего, это сделать через наследование... Но по сути, тебе никто не мешает держать внутри класса std::vector с нужным количеством переменных. |
| Автор: Walker 11.12.2007, 13:21 |
| Кажется, Вы путаете понятие класса (тип) и объекта класса. Создайте классы Вершина, Дуга, а затем создавайте объекты в каком угодно количестве и размещайте их в классе граф например в динамических коллекциях. |
| Автор: Trurl 11.12.2007, 13:26 |
| Спасибо. Подскажите, что такое "динамическая коллекция" и как её сотворить? |
| Автор: bsa 11.12.2007, 13:41 | ||
Никогда не слышал такого термина. Лучше узнать у того, кто его употребил. |
| Автор: Alek86 11.12.2007, 13:42 |
| "динамическая коллекция" - это список, размер которого может меняться можно написать самому, но лучше использовать готовые к примеру, std::vector, std::list и так далее Добавлено через 52 секунды bsa, думаю, это не термин а название |
| Автор: bsa 11.12.2007, 13:45 |
| нашел: http://ru.wikipedia.org/wiki/Коллекция_(программирование) |
| Автор: Andrey44 11.12.2007, 13:45 | ||
|
| Автор: Alek86 11.12.2007, 14:41 |
| оффтоп Lazin, думаю, Trurl не совсем того уровня, чтобы последовать твоему совету (если ошибся, извиняюсь) |
| Автор: Lazin 11.12.2007, 15:17 | ||
где-то читал статью, там автор предлагает добавлять такой map, что-бы потом проще было-бы добавлять новые атрибуты к классу. В этом есть один плюс, если значение с каким-то ключем не используется, то оно не хранится, например если есть класс - кнопка
|
| Автор: Earnest 11.12.2007, 19:18 |
| Lazin, все это здорово, если атрибуты имеют один тип, а если разные? В строках хранить? или вариант использовать? Тогда лучше сразу на Бейсике писать... Опять же, как их идентифицировать? По числовому ид-ру или по строке-имени? Нет уж спасибо... Лучше пусть хранятся ненужные с дефолтовскими значениями, авось не треснет память Trurl, если нужен граф, посмотри в сторону boost graph library. Можно научится пользоваться BGL, а можно просто познакомиться с концепцией - чтобы понять, что нужно хотеть от графа, а не лепить горбатого. Сочинить удачный интерфейс для сложной динамической структуры, да еще без опыта - нереально. |
| Автор: baldina 11.12.2007, 23:12 | ||||||
Trurl, при проектировании класса лучше всего начинать с интерфейса, т.е. с того, как класс будет использоваться. А уж после думать о реализации. Именно реализация определяет, какие именно члены класса понадобятся. Например: "Мне нужен класс, представляющий граф"
"Он должен иметь возможность добавлять произвольное число вершин и ребер." ---> "Понадобится представление для вершины и ребра". ---> "Ребро определяет связь между двумя вершинами"
Это не готовый интерфейс класса, это эскиз интерфейса как иллюстрация и результат размышлений. А вообще Earnest права, хорошие интерфейсы (да и реализацию) уже придумали (даже неоднократно), и в boost все весьма грамотно сделано. |