C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
найти объект класса по строке с именем
Татьяна
Отправлено: 24.08.2004, 11:45


Не зарегистрирован







Есть класс, не являющийся наследником TComponent.
CODE

class TMyClass{
puplic:
int t;
MyClass();
};


И есть Edit1->Text с именем объекта TMyClass. Как обратиться к этому объекту?

olegenty
Отправлено: 24.08.2004, 13:16


Ветеран

Группа: Модератор
Сообщений: 2412



для ответа недостаточно данных.
Doga
Отправлено: 24.08.2004, 13:19


Мастер участка

Группа: Участник
Сообщений: 575



Если вы хотите однозначно идентифецировать принадлежность своего объекта к какому либо классу, особенно если идентификация будет проводиться по имени класса (т.е. по строке), воспользуйтесь для создания своего объекта классом TObject.

QUOTE

TObject is the ultimate ancestor of all VCL objects and components.

Unit

Systobj

Description

TObject encapsulates fundamental behavior common to VCL objects by introducing methods that

respond when object instances are created or destroyed.
return class-type and instance information on an object and runtime type information (RTTI) about its published properties.
support message handling.

Use TObject as an immediate base class when declaring simple objects that do not need to persist (are not saved and reloaded) and that do not need to be assigned to other objects.

Much of the capability of VCL objects is established by methods that TObject introduces. Many of these methods are used internally by the development environment and are not intended for users to call directly. Others are overridden in descendant objects that have more complex behavior.

Note: While TObject has no pure virtual methods, objects of this type are not normally instantiated.


Например так:
CODE

class TMyClass : public TObject
{
 private:
   //...
 
 protected:
   //...

 public:
   int t;
   MyClass();
};

TMyClass *MyClass = new MyClass();

//Функции, которые помогут решить Вашу проблему
//ClassInfo
//ClassName
//ClassNameIs
//ClassParent
//ClassType
//Например так:
 
if (MyClass->ClassNameIs("TMyClass"))
{
 //Теперь можете быть уверенны — MyClass является объектом класса TMyClass
 ...
}


Удачи! smile.gif
olegenty
Отправлено: 24.08.2004, 13:36


Ветеран

Группа: Модератор
Сообщений: 2412



Ну, это полбеды. Ещё невредно знать, ГДЕ искать. Ну создаст она объект класса оператором new... Ну ляжет он в кучу. Интересно, как она его потом там по имени найдёт? А тут варианты. Либо хранить объекты в списке, и искать там, при условии, что объект одного класса встречается один раз, либо создавать самописную кучу...

Вот я и говорю — для ответа на вопрос недостаточно данных.
Doga
Отправлено: 24.08.2004, 14:09


Мастер участка

Группа: Участник
Сообщений: 575



QUOTE

Ещё невредно знать, ГДЕ искать.


Безусловно! Я полностью с Вами согласен, уважаемый olegenty !

Но пусть хотя бы эту "половину беды" решит сама Татьяна.
cool.gif

Вернуться в Вопросы программирования в C++Builder