두 개 이상의 상속 수준에 대한 비가상 인터페이스 관용구?
-
02-07-2019 - |
문제
가상이 아닌 인터페이스 관용구는 가상 메서드가 비공개 사용자 지정 지점인 방식과 공용 메서드가 비가상인 방식을 설명하여 기본 클래스가 사용자 지정 지점이 호출되는 방식을 항상 제어할 수 있도록 합니다.
이것은 우아한 관용구이고 나는 그것을 사용하고 싶지만 파생 클래스가 그 자체로 기본 클래스인 경우 어떻게 작동합니까?
해결책
기본 클래스 함수가 기본 클래스 함수를 재정의하더라도 파생 클래스가 기본 클래스의 전용 가상 함수를 재정의할 수 있기 때문에 작동합니다.
이는 완벽하게 합법적입니다.
class Parent
{
public:
int foo() {return bar();} // the non-virtual public interface
private
virtual int bar();
};
class Child : public Parent
{
private:
virtual int bar(); // overrides Parent::bar()
};
class Grandchild : public Child
{
private:
virtual int bar(); // overrides Child::bar();
};
다른 팁
파생 클래스는 스스로 결정할 수 있습니다.
가상 함수를 구현하여 메서드를 완전히 재정의할 수 있습니다.파생 클래스 메서드의 특정 지점에서 '중간' 클래스 함수를 호출하여 메서드를 확장할 수 있습니다.
그것이 원하는 것이 아니라면 '중간' 클래스에서 명시적으로 설정해야 합니다.하지만 나는 그러지 않을 것이다.이것을 원하신다면 아마도 기본 클래스에 충분한 사용자 정의 포인트를 제공하지 않았다는 의미일 것입니다.
제휴하지 않습니다 StackOverflow