DND>Я хочу посчитать сколько объектов создано под этим классом. Вроде бы всё просто — добавляем свойства:
... DND>А в конструкторах пишем:
...
DND>Получается, что uiNum и будет показывать порядковый номер вновь созданного объекта, однако при записи:
DND>
DND>TimeObj3 = TimeObj1 + TimeObj2;
DND>
DND>Номер TimeObj3 инкрементируется и становится равным не 3, а 4.
Не упомянут конструктор копирования, хотя судя по всему он реализован, и счетчик в нем инкрементируется...
DND>Как сделать правильно?
Никак — ты не сможешь контролировать создание временных объектов.
Расскажи лучше, что именно тебе нужно.
Любите книгу — источник знаний (с) М.Горький
Re[3]: Посчитать объекты?
От:
Аноним
Дата:
17.07.08 06:01
Оценка:
Здравствуйте, Ovl, Вы писали:
Ovl>Здравствуйте, Ovl, Вы писали:
DND>>>Как сделать правильно?
Ovl>>сделать конструктор и копировать счетчик оттуда
Ovl>>
Здравствуйте, Bell, Вы писали:
B>Не упомянут конструктор копирования, хотя судя по всему он реализован, и счетчик в нем инкрементируется...
Конструктор копирования я не писал, пользуюсь конструктором по умолчанию.
B>Расскажи лучше, что именно тебе нужно.
Хочу просто чтобы у каждого объекта был свой порядковый номер, хранящийся в одном из полей и присваивался во время создания объекта, еще красивее было бы чтобы его нельзя было изменить.
Здравствуйте, DukeNukem3D, Вы писали:
B>>Не упомянут конструктор копирования, хотя судя по всему он реализован, и счетчик в нем инкрементируется...
DND>Конструктор копирования я не писал, пользуюсь конструктором по умолчанию.
Значит при конструировании копии не будет инкрементирован счетчик, и будет использовано значение из исходного объекта, т.е. в результате получатся объекты с дублирующимися номерами.
B>>Расскажи лучше, что именно тебе нужно.
DND>Хочу просто чтобы у каждого объекта был свой порядковый номер, хранящийся в одном из полей и присваивался во время создания объекта...
Значит строгая последовательность номеров не важна?
DND>...еще красивее было бы чтобы его нельзя было изменить.
class Test
{
constint id_;
static int counter_;
public:
Test() : id_(counter_++) {}
Test(const Test& t) : id_(counter_++) {}
};
int Test::counter_ = 0;
DND>Я хочу посчитать сколько объектов создано под этим классом. Вроде бы всё просто — добавляем свойства:
Ну ты и считаешь, все правильно. Просто временный объект — это тоже объект.
Здравствуйте, DukeNukem3D, Вы писали:
DND>Есть класс: DND>Как сделать правильно?
Воспользуйся фабричной функцией для создания объектов. В ней и считай их количество.