2013-05-11 4 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++에서 비슷한 일을 할 수 있습니까? 어떻게 어떤 VAR에서 클래스 유형을 저장하고 그것에서 개체를 만들고 (물론 생성자를 호출) 짧은 대답은

감사

+0

상속을 찾고 있습니다. 당신은 좋은 책을 사서 어쩌면 참고하거나 온라인으로 많은 튜토리얼이 있어야합니다. 그러나이 특정 사례를 확인하려면 : http://www.tutorialspoint.com/cplusplus/cpp_inheritance.htm – stardust

+0

나는 C++에서 상속이 어떻게 작동하는지 알고 있으며 Free Pascal과 비슷합니다. 그러나'TBaseClassType = class of 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