2013-05-11 3 views
0

В Free Pascal Я могу создать класс класса, который создает объект из назначенного типа класса. Например:C++ Тип, который имеет тип класса

type 
    TBaseClass = class 
    end; 

    TBaseClassType = class of TBaseClass; 

    TFooClass = class(TBaseClass) 
    end; 

    TBarClass = class(TBaseClass) 
    end; 

Теперь я могу объявить переменную:

MyClassType: TBaseClassType; 
MyObject: TBaseClass; 

И использование:

// This will create instance of object TFooClass 
MyClassType := TFooClass; 
MyObject := MyClassType.Create; 

// ... and here of TBarClass 
MyClassType := TBarClass; 
MyObject := MyClassType.Create; 

Как я могу сделать что-то подобное в C++? Как хранить тип класса в какой-то вар и создать объект из него (и называют его конструктор конечно)

С уважением

+0

Вы ищете наследство. Вы должны получить хорошую книгу и, возможно, указать ее, или есть много учебников онлайн. Но для этого конкретного случая проверьте: http://www.tutorialspoint.com/cplusplus/cpp_inheritance.htm – stardust

+0

Я знаю, как наследование на C++ работает, похожее на Free Pascal. Но посмотрите на «TBaseClassType = класс TBaseClass». Что такое эквивалент C++ этого объявления? – Dibo

+0

@ Dibo, почему вы не начинаете с книги? –

ответ

0

Короткий ответ: вы не можете, потому что типы не являются объектами первого класса в C++.

Более длинный ответ: в некоторых случаях вы можете добиться того же, используя шаблоны.

Если у вас есть функция, в которой вы хотите параметризовать тип класса, вы можете использовать функцию шаблона. Так, к примеру, что-то подобное тому, что вы описали выше, может быть достигнута с помощью:

template <class MyClassType> 
void doSomething() { 
    MyClassType myObject = MyClassType(); 
    /* Do something with myObject */ 
} 

doSomething<TFooClass>(); 
doSomething<TBarClass>(); 

Так, короче говоря, пример вы дали выше не может быть прямолинейно переведен на C++ (потому что вы не можете определить переменную для проведения тип), но в зависимости от реальной проблемы аналогичный код можно было бы написать.

+0

Хорошо, я постараюсь с этим. благодаря – Dibo

Смежные вопросы