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

 
Комбинатор :
이를 통해 추가 상속을 직접 금지하는 final 키워드와 유사하게 만들 수 있습니다.
예, 위의 예에서 알 수 있듯이 아날로그를 만드는 것은 불가능합니다. private 메소드의 경우에도 final을 작성해야 합니다.
 
fxsaber :
예, 위의 예에서 알 수 있듯이 아날로그를 만드는 것은 불가능합니다. private 메소드의 경우에도 final을 작성해야 합니다.

기이한. 공개 상속의 경우 최대 액세스 권한은 비공개가 아닌 보호되어야 합니다.

예제에서 함수가 오버로드되었습니까?

 
Комбинатор :

기이한. 공개 상속의 경우 최대 액세스 권한은 비공개가 아닌 보호되어야 합니다.

예제에서 함수가 오버로드되었습니까?

정확히. 나는 방금 나 자신을 발견했다.

예에서 할 경우

BASE() {Func();} // вместо void Init() {Func();} Вызов Base.Init() - убрать конечно.

그런 다음 어떤 일이 발생해야 하는지 올바르게 이해했는지 여부를 시작한 후 자신을 확인할 수 있습니다.

 

내가 얻는 터미널 로그에서

2016.09.12 15:49:14.209 Simple_Test (RTS-9.16,M1)       array out of range in 'Simple_Test.mqh' (85,33)

소스코드가 표시된 곳으로 서툴게 올라갑니다. 로그에서 이러한 메시지를 두 번 클릭하여 지정된 행으로 즉시 이동할 수 있다면 편리할 것입니다.

누군가가 지원한다면 - 목소리를 내십시오.

 
Sergei Vladimirov :

클래식은 하위 클래스에서 재정의하는 기본 클래스의 인터페이스입니다.

고전은 보호/공개 가상 메서드가 재정의되는 경우입니다. 그러나 개인의 경우 - (응용 측면에서) 그렇게 분명하지 않습니다. 대답 해줘서 고마워.
 
fxsaber :
고전은 보호/공개 가상 메서드가 재정의되는 경우입니다. 그러나 개인의 경우 - (응용 측면에서) 그렇게 분명하지 않습니다. 대답 해줘서 고마워.

예, 귀하의 답변을 보지 않고 이미 예제를 삭제했습니다. 정말 나빴습니다.

업데이트 답변을 하시다가 제가 기본적으로 헷갈렸던 부분이 있습니다. 그 예에서는 모든 것이 정확했지만 헛되이 삭제되었습니다. 다시 한 번 사용 예를 들면 다음과 같습니다.

 class CAnimal
{
private :
   void virtual Speak(){}
};

class CDog : public CAnimal
{
public :
   void Speak(){ Print ( "Гав!" );}
};

class CBigDog : public CDog
{
public :
   void Speak(){ Print ( "Громкий гав!" );}
};

void OnStart ()
{
   CDog oDog;
   oDog.Speak();
   
   CBigDog oBigDog;
   oBigDog.Speak();
   
   CDog* pDog = &oBigDog; 
   pDog.Speak();       // "Громкий гав!", а не "Гав!", как было бы без виртуального метода
}
 
Sergei Vladimirov :

업데이트 답변을 하시다가 제가 기본적으로 헷갈렸던 부분이 있습니다. 그 예에서는 모든 것이 정확했지만 헛되이 삭제되었습니다. 다시 한 번 사용 예를 들면 다음과 같습니다.

좋은 예가 아니기 때문에 CAanimal 인터페이스의 사용은 어디에도 없습니다. 예, 두 명의 후손이 더 공개되었습니다. 주제를 이해했으니 괜찮습니다.
 
#property indicator_buffers 1 + 1

컴파일러는 두 가지 작업을 수행하지 않습니다.

 
fxsaber :
좋은 예가 아니기 때문에 CAanimal 인터페이스의 사용은 어디에도 없습니다. 예, 두 명의 후손이 더 공개되었습니다. 주제를 이해했으니 괜찮습니다.

정상적인 예입니다. 추상적인 동물은 원칙적으로 일종의 소리를 내는데 정의되어 있지 않으므로 Speak() 메서드를 호출할 수 없고 특정 종의 동물에만 호출할 수 있습니다. 따라서 기본 클래스에서 private 가상 메서드를 선언하고 후손에서 이를 재정의하고 엽니다.

 
Sergei Vladimirov :

정상적인 예입니다. 추상적인 동물은 원칙적으로 일종의 소리를 내는데 정의되어 있지 않으므로 Speak() 메서드를 호출할 수 없고 특정 종의 동물에만 호출할 수 있습니다. 따라서 기본 클래스에서 private 가상 메서드를 선언하고 후손에서 이를 재정의하고 엽니다.

자손에게도 비공개로 하는 것이 좋을 것입니다. 더 나은 이해를 위해. 간단히 말해서 요점이 아닙니다.