2012-01-22 3 views
2

C++의 상속에 약간의 문제가 있습니다. 알아낼 수 없습니다.C++에서 상속 된 클래스를 함수로 전달

그래서, 즉, 내가 STL과 목록에서 파생 된 클래스가 있다고 가정 :

class Class1: public list<T>{ 
     virtual func1(); 

} 

class Class2 : public Class1<w/e>{ 
     func1(); 
} 

함수에이를 통과 할 때 나는 데 문제가 있습니다. 이 중 하나의 인스턴스를 함수에 제대로 전달하여 두 유형 중 하나의 인스턴스가 전달 될 수있는 경우 적절한 가상 함수를 사용하도록하려면 어떻게해야합니까? 나는 상속 및 가상 기능을 잠시 수행하지 않았으므로 약간 녹슬 었습니다. (함수가 클래스의 멤버 함수가 아니라고 가정).

답변

6

당신은 참조로 함수에 전달할 필요가

int function(Class1& obj); 

또는 포인터로 ;

int function(Class1* obj); 

올바른 버전의 가상 메서드를 호출해야합니다. 당신이 목적은 항상 기능의 클래스 1로 구성 복사됩니다 그

int function(Class1 obj); 

중 하나없이 통과, 항상 클래스 1을 호출 할 경우

::에서 func1() 그래서

+0

에서 함수 호출 기본 클래스라고 가정하고 런타임에 실제로 어떤 클래스인지 결정합니다. – Glem

+0

정확히 두 클래스 모두 Class1 이상이므로 전달할 수 있으며 호출 할 가상 메서드를 런타임으로 결정합니다. –

+0

항상 기본 클래스입니다. ** 클래스의 모든 인스턴스는 ** 그것이 파생 된 모든 클래스의 인스턴스입니다. 가상 함수의 목적은 코드가 기본 클래스의 인스턴스에서 함수를 호출하고 해당 함수의 올바른 버전을 호출하도록 허용하는 것입니다. –

관련 문제