Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
DPisarciuc
Зарегистрирован: 23.05.2003 Сообщения: 17
|
Добавлено: Чт Июн 26 2003 15:35 Заголовок сообщения: Class declaration |
|
|
Hello!
How to declare a class, which can have only dynamic instances?
Thanks. |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Чт Июн 26 2003 16:12 Заголовок сообщения: Re: Class declaration |
|
|
Very simply
class dynamic { public: dynamic (); ~dynamic (); }; |
|
Вернуться к началу |
|
|
DPisarciuc
Зарегистрирован: 23.05.2003 Сообщения: 17
|
Добавлено: Чт Июн 26 2003 17:35 Заголовок сообщения: Re: Class declaration |
|
|
Niujeli tak trudno poneati suti voprosa? Ili tebe lij-by chito-to otvetiti? Prejde chem otvetiti - chitai vopros i otvechiai po suti a ne sory forum...
Obiasniaiu suti voprosa: nado obiaviti ClassA tak chito-by:
ClassA a; // compiler error!!! ClassA* pA = new ClassA(...); // ok |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Чт Июн 26 2003 18:06 Заголовок сообщения: Виноват, я понял иначе (+) |
|
|
Я понял "динамическая" == "не занимающая память при компиляции". Твой вариант, наверное, может быть таким (я не проверял, но думаю, копать здесь):
class ClassA { private|protected: ClassA(); &n bsp; ... public: ~ClassA(); ... friend int CreateClassA(); };
и переопределить оператор new для класса ClassA так, чтобы new ClassA() вызывал функцию CreateClassA().
Извинения приняты? |
|
Вернуться к началу |
|
|
Sclis Гость
|
Добавлено: Пт Июн 27 2003 05:56 Заголовок сообщения: Re: Виноват, я понял иначе (+) |
|
|
наверно, сам класс должен быть абстрактным... создать экземпляр абстрактного класса нельзя. создавать его надо в фабрике класов. (вернее даже не его, а конкретного потомка от него)
class classA; abstract ----------- class FabricA{ class classAA(classA){ ...}; classA* createNew(); ... ----------- FabricA::createNew(){ retur n new classAA }
хотя, я конечно могу и ошибаться... |
|
Вернуться к началу |
|
|
Алексей Гость
|
Добавлено: Сб Июн 28 2003 07:13 Заголовок сообщения: Re: Class declaration |
|
|
Можно объявить закрытый деструктор, но при этом оставить открытыми контструкторы. В этом случае для удаления вместо delete придется использовать специальную функцию, которая и будет вызывать delete.
class A { public: A(); void free ( A* a ) { delete a; } private: ~A(); }; |
|
Вернуться к началу |
|
|
|