오류, 버그, 질문 - 페이지 1677

 
Sergei Vladimirov :
나는 시가와 종가에 대해 아무 것도 쓰지 않았다.
그래서 내가 당신을 오해했습니다 - 죄송합니다.
 

왜 개인 메서드에 오류가 있습니까?

 class CFoo
  {
   private :
   void virtual func( int x) final { }
  };
 
class CBar : public CFoo
  {
   void func( int ) { }
  };
 
fxsaber :

왜 개인 메서드에 오류가 있습니까?

private은 그것과 아무 관련이 없으며, 이 함수를 final로 선언했고 재정의하려고 합니다.

추신. 나는 컴파일을 시도했다 - 컴파일러는 문제가 무엇인지 씁니다.

 
Sergei Vladimirov :
private은 그것과 아무 관련이 없습니다. 이 함수를 final로 선언했습니다.
따라서 상속된 클래스에는 부모의 private 메서드가 없습니다. 따라서 재정의해서는 안 되는 것과 같이 재정의해야 합니다.
 
fxsaber :
따라서 상속된 클래스에는 부모의 private 메서드가 없습니다. 따라서 재정의해서는 안 되는 것과 같이 재정의해야 합니다.
안녕하세요, 도착했습니다.
 
Sergei Vladimirov :
안녕하세요, 도착했습니다.
공개 상속. 컴파일러에 따르면 부모의 개인 메서드는 자식에서 액세스할 수 없습니다.
 
fxsaber :
공개 상속. 컴파일러에 따르면 부모의 개인 메서드는 자식에서 액세스할 수 없습니다.

기본 클래스의 개인 가상 메서드는 상속자에서 호출할 수 없지만 재정의할 수 있습니다.

 
Sergei Vladimirov :

기본 클래스 개인 가상 메서드는 상속자에서 호출할 수 없지만 재정의할 수 있습니다.

고마워, 몰랐어. 나는 이것이 유용할 수 있는 어떤 것도 생각할 수 없다. X_Macro 와 매우 유사합니다. 더 나은 이해를 위해 비슷한 예를 만들어 보겠습니다.
 
fxsaber :
더 나은 이해를 위해 비슷한 예를 만들어 보겠습니다.

그것은 멋진 것으로 밝혀졌다.

 class BASE
{
private :
   void virtual Func() { Print ( __FUNCSIG__ ); }
public :
   void Init() {Func();}
};

class CHILD : public BASE
{
private :
   virtual void Func() { Print ( __FUNCSIG__ ); }
};

void OnStart ()
{
  BASE* Base = new CHILD;
  
  Base.Init();
  
   delete (Base);
}

아마도 그러한 디자인은 어딘가에 유용할 수 있습니다.

 
fxsaber :
공개 상속. 컴파일러에 따르면 부모의 개인 메서드는 자식에서 액세스할 수 없습니다.
이를 통해 추가 상속을 직접 금지하는 final 키워드와 유사하게 만들 수 있습니다.