Страница 1 из 1

Класс и Visual C++6.0

Добавлено: 26 окт 2004, 08:47
Den
Доброе время суток!

Каким образом (самым простеньким) программно можно создать в Visual C++6.0 класс, самый элементарный? Желательно, как-то исходниками подскажите или псевдокодом.

Заранее благодарен! С уважением к участникам форума!!!

Добавлено: 26 окт 2004, 14:19
Romeo
ClassView -> правый клик на проекте -> Add new class

Добавлено: 26 окт 2004, 16:20
Den
Romeo, это безусловно смешно, но мне нужно программно. Не усложнять сущности ... это верно. Тем не менее, просто необходимо, программно.

Добавлено: 26 окт 2004, 16:24
Absurd
Если я тебя правильно понял, то это называется лямбдой
http://www.google.ru/search?hl=ru&q=C%2 ... Google&lr=

Добавлено: 01 ноя 2004, 14:58
Den
Дорогой Absurd найди мне лямбду, что бы класс программно сделать. Первый раз такое слышу, к тому же там все по английски.

Добавлено: 01 ноя 2004, 17:05
Absurd
Дорогой Absurd найди мне лямбду, что бы класс программно сделать
Найди мне язык, в котором вообще можно программно класс сделать.
В Java - нельзя. Анонимные классы там конечно есть, но создать именованный класс в рантайме там нельзя.
Нечто похожее на анонимные классы можно сделать при помощи ламбды.
Первый раз такое слышу, к тому же там все по английски.
Тебе надо на русском? А на свахили не хочешь? Или может на урду?

Добавлено: 02 ноя 2004, 16:35
Den
Absurd мне показалось ты обиделся на мой вопрос, извини. Вообще то он планировался с юмором, жаль не вышло. Это во-первых.
Во-вторых классы программно создают, кстати не так уж сложно (в ближайшее время мне не выйти на человека, который это знает). Хочешь, позже, когда узнаю как это делается, отпишу тебе?
Свахили и урду, я не знаю (к счастью). Владею немецким (в определенной степени).

Добавлено: 05 ноя 2004, 13:14
Marjan
Давай разберемся. Тебе надо создать програмно клас или обьект класа? Если обьект то это делаеться с помощью RTTI (Run Time Type Information). Чтобы класс поддержывал RTTI надо сделать так:
//Header file (*.h)
class CYourClass : public CObject
{
DECLARE_DYNCREATE(CYourClass);
//Your member variables
//Your member functions
}
//Implementation file
IMPLEMENT_DYNCREATE(CYourClass, <Родительский клас (В нашем случае СObject)>);
Примечание: Чтобы это сделать надо твой клас унаследовать от CObject или же от класов которые наследуют CObject

в МСДН же всё есть ...

Добавлено: 05 ноя 2004, 17:22
Acidy
:!:

Код: Выделить всё

DECLARE_DYNCREATE(CYourClass);
и

Код: Выделить всё

IMPLEMENT_DYNCREATE(CYourClass, CObject)
как раз таки и заполняют RTTI структуру для класса, а дальше в рантайм берем инфу из этой структуры и вызываем CreateObject() с приведением типа.

Код: Выделить всё

// This example creates an object from the run-time class. It only 
// creates objects derived from CWnd.

// We only want to create an object derived from CWnd.
if (!pClass->IsDerivedFrom(RUNTIME_CLASS(CWnd)))
{
   TRACE(_T("Error; Object %s is not derived from CWnd\n"));
   return;
}

// Get a pointer to the base class CRuntimeClass.
#ifdef _AFXDLL
   CRuntimeClass* pBaseClass = pClass->m_pfnGetBaseClass();
#else
   CRuntimeClass* pBaseClass = pClass->m_pBaseClass;
#endif
ASSERT(pBaseClass != NULL);

TRACE(_T("Creating object %s derived from %s, with object size %d 
   and schema %d\n"), pClass->m_lpszClassName, 
   pBaseClass->m_lpszClassName, pClass->m_nObjectSize, 
   pClass->m_wSchema);

// Create the object.
CObject* pObject = pClass->CreateObject();
Это из МСДН ... смотри определение структуры CRuntimeClass.