Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

OOP. Доступ ко всем созданным объектам. Статические члены в наследуемых классах.

7.8K
12 сентября 2006 года
littlefrankie
57 / / 23.08.2006
Значит есть у меня приватный статический массив в классе. При вызове конструктора класса указатель на новый создаваемый объект добавляется в массив. При вызове деструктора соответствующий указатель удаляется. Также имеются несколько статических процдур для обработки всех созданных объектов класса. Код здесь не привожу потомучто он очень громозкий.

вопрос №1: Есть ли другая возможность обработки ВСЕХ созданных объектов класса, не записывая их не в какой массив. Может в с++ предусмотрено чтонибудь типа конструкции foreach для этих целей??

Далее я планирую создать потомок этого класса. Чтобы статический массив был доступен в потомке, его надо объявить как protected, как я понимаю.

вопрос №2: как будет выглядеть статический массив в потомке и как к нему надо будет обращаться? По идее это должен быть один массив и для предка и для потомка, но никак не два разных массива.

вопрос №3: как в сях производится контроль типов? Если при вызове конструкторов классов предка и потомка я буду записывать указатели в один массив, то как мне потом при переборе всех членов массива отличить один тип от другого?

посоветуйте, что почитать по поводу наследования и использования статических членов.
398
12 сентября 2006 года
Alexandoros
630 / / 21.10.2005
Цитата:
вопрос №3: как в сях производится контроль типов?


методами с++ - typeid
+ Еще можно написать свою собственную виртуальную ф-цию, типа IsKindOf

Цитата:
Как будет выглядеть статический массив в потомке и как к нему надо будет обращаться?



так же как и в базовом класе, или, если перекрываются имена, через CBaseClass::MyStaticArray

Цитата:
По идее это должен быть один массив и для предка и для потомка, но никак не два разных массива.


Так и будет.

Цитата:
вопрос №1: Есть ли другая возможность обработки ВСЕХ созданных объектов класса, не записывая их не в какой массив.


Собственно нету. Их нужно гдето хранить, будь то в списке или векторе.
А ты поищи доки и почитай про "фермы". + еще "паттерны"

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