fxsaber : 고전은 보호/공개 가상 메서드가 재정의되는 경우입니다. 그러나 개인의 경우 - (응용 측면에서) 그렇게 분명하지 않습니다. 대답 해줘서 고마워.
예, 귀하의 답변을 보지 않고 이미 예제를 삭제했습니다. 정말 나빴습니다.
업데이트 답변을 하시다가 제가 기본적으로 헷갈렸던 부분이 있습니다. 그 예에서는 모든 것이 정확했지만 헛되이 삭제되었습니다. 다시 한 번 사용 예를 들면 다음과 같습니다.
class CAnimal
{
private :
voidvirtual Speak(){}
};
class CDog : public CAnimal
{
public :
void Speak(){ Print ( "Гав!" );}
};
class CBigDog : public CDog
{
public :
void Speak(){ Print ( "Громкий гав!" );}
};
voidOnStart ()
{
CDog oDog;
oDog.Speak();
CBigDog oBigDog;
oBigDog.Speak();
CDog* pDog = &oBigDog;
pDog.Speak(); // "Громкий гав!", а не "Гав!", как было бы без виртуального метода
}
이를 통해 추가 상속을 직접 금지하는 final 키워드와 유사하게 만들 수 있습니다.
예, 위의 예에서 알 수 있듯이 아날로그를 만드는 것은 불가능합니다. private 메소드의 경우에도 final을 작성해야 합니다.
기이한. 공개 상속의 경우 최대 액세스 권한은 비공개가 아닌 보호되어야 합니다.
예제에서 함수가 오버로드되었습니까?
기이한. 공개 상속의 경우 최대 액세스 권한은 비공개가 아닌 보호되어야 합니다.
예제에서 함수가 오버로드되었습니까?
정확히. 나는 방금 나 자신을 발견했다.
예에서 할 경우
BASE() {Func();} // вместо void Init() {Func();} Вызов Base.Init() - убрать конечно.
그런 다음 어떤 일이 발생해야 하는지 올바르게 이해했는지 여부를 시작한 후 자신을 확인할 수 있습니다.
내가 얻는 터미널 로그에서
소스코드가 표시된 곳으로 서툴게 올라갑니다. 로그에서 이러한 메시지를 두 번 클릭하여 지정된 행으로 즉시 이동할 수 있다면 편리할 것입니다.
누군가가 지원한다면 - 목소리를 내십시오.
클래식은 하위 클래스에서 재정의하는 기본 클래스의 인터페이스입니다.
고전은 보호/공개 가상 메서드가 재정의되는 경우입니다. 그러나 개인의 경우 - (응용 측면에서) 그렇게 분명하지 않습니다. 대답 해줘서 고마워.
예, 귀하의 답변을 보지 않고 이미 예제를 삭제했습니다. 정말 나빴습니다.
업데이트 답변을 하시다가 제가 기본적으로 헷갈렸던 부분이 있습니다. 그 예에서는 모든 것이 정확했지만 헛되이 삭제되었습니다. 다시 한 번 사용 예를 들면 다음과 같습니다.
업데이트 답변을 하시다가 제가 기본적으로 헷갈렸던 부분이 있습니다. 그 예에서는 모든 것이 정확했지만 헛되이 삭제되었습니다. 다시 한 번 사용 예를 들면 다음과 같습니다.
컴파일러는 두 가지 작업을 수행하지 않습니다.
좋은 예가 아니기 때문에 CAanimal 인터페이스의 사용은 어디에도 없습니다. 예, 두 명의 후손이 더 공개되었습니다. 주제를 이해했으니 괜찮습니다.
정상적인 예입니다. 추상적인 동물은 원칙적으로 일종의 소리를 내는데 정의되어 있지 않으므로 Speak() 메서드를 호출할 수 없고 특정 종의 동물에만 호출할 수 있습니다. 따라서 기본 클래스에서 private 가상 메서드를 선언하고 후손에서 이를 재정의하고 엽니다.
정상적인 예입니다. 추상적인 동물은 원칙적으로 일종의 소리를 내는데 정의되어 있지 않으므로 Speak() 메서드를 호출할 수 없고 특정 종의 동물에만 호출할 수 있습니다. 따라서 기본 클래스에서 private 가상 메서드를 선언하고 후손에서 이를 재정의하고 엽니다.