가상 메서드가있는 추상 기본 클래스가 있습니다. 파생 클래스에서이 메서드가 구현됩니다. 그러나 클래스의 개체를 인스턴스화하지 않고 함수를 호출 할 수 있으려면 정적 메서드로 파생 클래스의 함수를 사용하고 싶습니다. 기본적으로은 정적 클래스에서 파생 된 기본 클래스의 가상 메서드를 구현합니다.
class Base
{
virtual double Foo(double rParam) const;
};
class Derived1 : public Base
{
static double Foo(double rParam);
};
class Derived2 : public Base
{
static double Foo(double rParam);
};
는 Derived1 및 Derived2는 (객체 데이터에 의존하지 않는) 정적 기능의 다른 구현을 제공하지만, 난 그 기능이 순서의 다른 기능에 그 함수를 호출 할 수있을 가상되고 싶어 기본 클래스 지금 볼 수있는 유일한 솔루션은 기본 클래스의 가상 함수와 정적 함수 인 다른 클래스의 두 멤버 함수를 파생 클래스에 구현하는 것입니다. 소스 코드가 두 배가되는 것을 방지하기 위해 가상 함수는 정적 함수를 직접 호출 할 수 있습니다 (인라인 될 수 있음). 다른 솔루션?
class Derived : public Base
{
double Foo(double rParam)const
{
return FooStatic(rParam);
}
inline static double FooStatic(double rParam);
};
'Foo '가'virtual'으로 표시되면 이는 객체의 런타임 유형에 따라 달라 지므로 클래스의 인스턴스와 결합 될 수 없음을 의미합니다. –
상황이 좀 더 까다 롭습니다. 단순화 된 예로서 함수 foo가 필요한 기본 클래스가 있다고 가정합니다. Derived1에서 이것은 선형 함수이므로 foo (x) = x와 Derived2 foo (x) = x^2에서 두 함수가 객체 데이터에 의존하지 않습니다. 그러나 기본 클래스의 다른 함수에서이 함수를 호출 할 수 있으려면 기본 클래스에서 함수를 가상으로 지정해야합니다. 파생 클래스에는 다른 데이터 멤버도 있지만 정적/가상 메서드를 사용하는 현재 예제에서는 중요하지 않습니다. – Ferdi