Страница 1 из 1

Проблема статического создания объектов

Добавлено: 31 окт 2005, 14:49
arris
Значится так: два с половиной года назад создал код(четкую иерархию классов). Все работало замечательно! Вчера сел и столкнулся с проблемой! Необходимо было:

.................
CCar*car[2];

CBMW car1(200);
CBMW car2(270);

car[0]=&car1;
car[1]=&car2;
..................

Проблема в том что по итогу значения car[0] и car[1] абсолютно одинаковы!!!!
Далее: CBMW наследник CCar.
В конструкторе CBMW:
...................
static CSpeed s;
...................
И вот тут для разных объектов CBMW переменная s создается по одному и тому же адрессу!
Соответств. литер. под рукой нет, МСДНа тоже, так что прошу помощь зала, если кто-то сталкивался с такой проблемой или может пролить на неё свет очень прошу! Заранее благодарен!

Добавлено: 31 окт 2005, 15:25
WinMain
На первую часть вопроса однозначно не отвечу. Здесь нужно смотреть код в контексте задачи.

Вторая часть вопроса довольно проста. Статические члены класса существуют в единственном экземпляре, независимо от количества созданных объектов данного класса. Соответственно статический член класса является общим для всех объектов данного класса.
Это в любом учебнике по С++ написано.

Добавлено: 31 окт 2005, 15:29
arris
WinMain в принципе этого достаточно, если кто знает как это обойти поделитесь плз! Да, и возможно ли это вобще?

Добавлено: 31 окт 2005, 15:41
WinMain
Не используй модификатор static, тогда каждый объект класса будет иметь свой экземпляр данной переменной.

Добавлено: 31 окт 2005, 15:51
arris
Не, WinMain, очень хочется чтобы был static. Меня все в нем устраивает, кроме последнего свойства! Есть ли альтернативы? Хотя сам подозреваю что нет!

Добавлено: 01 ноя 2005, 10:35
Absurd

Добавлено: 01 ноя 2005, 10:41
Hawk
Уважаемый arris, static СПЕЦИАЛЬНО сделан чтобы все екземпляры класса имели одну и туже переменную. Если вам надо чтобы кажды эксемпляр имел свою - не используйте static. Какие ещё варианты могут быть? и чем static так устраивает вас в отличии от обычных переменных класса?

Добавлено: 01 ноя 2005, 12:41
arris
Уважаемый Hawk, такое определение объекта меня устраивало тем что:
1 объект по свойствам почти аналогичный глобальному можно было создавать в любой точке программы, а не предопределять в описании класса
2 работать далее с глобальным указателем на этот объект
Другими словами "динамическое создание глобального объекта"(ух!! :? )
Это казалось мне элегантно, и менее расточительно в плане размера всего класса!
Но виноват :( , не дочитал, напоролся сам на себя!
Спасибо всем! Разъяснили!
P.S.Проблему, кстати решил, как раз отказом от static и предопределением глобальных объектов!

Добавлено: 01 ноя 2005, 13:14
WinMain
Вообще я бы не стал сводить вопрос лишь к использованию модификатора static или других ключевых слов языка программирования. Вопрос взаимодействия объектов, их область видимости, иерархия наследования, использование динамических библиотек и т.п. присутствуют в каждом проекте. И над этим приходится думать каждому программисту. Обычно берут за основу либо готовые каркасы на базе архитектуры "документ/вид", "модель-вид-контроллер", либо используют в решении задачи широко известные шаблоны проектирования. Но это уже другая тема.