문제

가상이 아닌 인터페이스 관용구는 가상 메서드가 비공개 사용자 지정 지점인 방식과 공용 메서드가 비가상인 방식을 설명하여 기본 클래스가 사용자 지정 지점이 호출되는 방식을 항상 제어할 수 있도록 합니다.

이것은 우아한 관용구이고 나는 그것을 사용하고 싶지만 파생 클래스가 그 자체로 기본 클래스인 경우 어떻게 작동합니까?

도움이 되었습니까?

해결책

기본 클래스 함수가 ​​기본 클래스 함수를 재정의하더라도 파생 클래스가 기본 클래스의 전용 가상 함수를 재정의할 수 있기 때문에 작동합니다.

이는 완벽하게 합법적입니다.


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();
};

다른 팁

파생 클래스는 스스로 결정할 수 있습니다.

가상 함수를 구현하여 메서드를 완전히 재정의할 수 있습니다.파생 클래스 메서드의 특정 지점에서 '중간' 클래스 함수를 호출하여 메서드를 확장할 수 있습니다.

그것이 원하는 것이 아니라면 '중간' 클래스에서 명시적으로 설정해야 합니다.하지만 나는 그러지 않을 것이다.이것을 원하신다면 아마도 기본 클래스에 충분한 사용자 정의 포인트를 제공하지 않았다는 의미일 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top