OOP. Доступ ко всем созданным объектам. Статические члены в наследуемых классах.
вопрос №1: Есть ли другая возможность обработки ВСЕХ созданных объектов класса, не записывая их не в какой массив. Может в с++ предусмотрено чтонибудь типа конструкции foreach для этих целей??
Далее я планирую создать потомок этого класса. Чтобы статический массив был доступен в потомке, его надо объявить как protected, как я понимаю.
вопрос №2: как будет выглядеть статический массив в потомке и как к нему надо будет обращаться? По идее это должен быть один массив и для предка и для потомка, но никак не два разных массива.
вопрос №3: как в сях производится контроль типов? Если при вызове конструкторов классов предка и потомка я буду записывать указатели в один массив, то как мне потом при переборе всех членов массива отличить один тип от другого?
посоветуйте, что почитать по поводу наследования и использования статических членов.
Цитата:
вопрос №3: как в сях производится контроль типов?
методами с++ - typeid
+ Еще можно написать свою собственную виртуальную ф-цию, типа IsKindOf
Цитата:
Как будет выглядеть статический массив в потомке и как к нему надо будет обращаться?
так же как и в базовом класе, или, если перекрываются имена, через CBaseClass::MyStaticArray
Цитата:
По идее это должен быть один массив и для предка и для потомка, но никак не два разных массива.
Так и будет.
Цитата:
вопрос №1: Есть ли другая возможность обработки ВСЕХ созданных объектов класса, не записывая их не в какой массив.
Собственно нету. Их нужно гдето хранить, будь то в списке или векторе.
А ты поищи доки и почитай про "фермы". + еще "паттерны"
[/QUOTE]
В любом языке здесь требуется некоторый контейнер.В принципе решение со контейнером статическим членом вполне подходящее. Я бысделал регистрацию нового экземпляра прямо в его конструкторе, а дерегистрацию соотв. в деструкторе. Т.о. отпадает необходимость вызова доп. методов класса и потомки также будут автоматически регистрироваться в едином для всего семейства контейнере. Не забудь сделать десруктор виртуальным.
Метод foreach можно реализовать в базом классе, одним из аргументов которого будет функция обработки элемента контейнера.
[QUOTE=littlefrankie]
Далее я планирую создать потомок этого класса. Чтобы статический массив был доступен в потомке, его надо объявить как protected, как я понимаю.
вопрос №2: как будет выглядеть статический массив в потомке и как к нему надо будет обращаться? По идее это должен быть один массив и для предка и для потомка, но никак не два разных массива.
[/QUOTE]Контейнер будет един и приватен для базового класса. Регистрация, как я говорил будет происходить автоматически. А для прочих доступов к контейнеру лучше сделать методы-гетеры (от слова "get"), изменять же этот контейнер (кроме как из конструктора и деструктора базового класса) IMHO нельзя, поэтому сетеров (от слова "set") не будет. Приспользовании protected эта логика может быть нарушена, т.к. будет полный доступ к контейнеру.
[QUOTE=littlefrankie]
вопрос №3: как в сях производится контроль типов? Если при вызове конструкторов классов предка и потомка я буду записывать указатели в один массив, то как мне потом при переборе всех членов массива отличить один тип от другого?
[/QUOTE]
На этот вопрос уже ответили, добавлю, что использование виртуального метода предпочтительнее, чем RTTI.
Кроме того надо определиться такли необходима инф. о типе, может, вполне можно обойтись общим интерфейсом?
[QUOTE=littlefrankie]
посоветуйте, что почитать по поводу наследования и использования статических членов.[/QUOTE]
Страуструпа, конечно. :)