메서드의 가상 속성을 상속하는 것에 대해 혼란스러워합니다.가상 함수 상속
클래스 A, 클래스 B, 클래스 C 및 클래스 D가 있다고 가정 해 보겠습니다. 클래스는 다음과 같이 상속됩니다. A -> B -> C -> D, A는 기본 클래스입니다.
이번에는 확실합니다. 기본 클래스 (클래스 A)에서 가상 클래스 메서드 선언을 시작하면 기본 클래스에서 파생 된 모든 클래스에 대해 메소드 가상이 생성됩니다. 파생 클래스. (가상으로 결정된 B 및 C 클래스 메소드).
혼란이 여기에 있습니다. 기본 클래스 A에 가상 멤버가 없을 경우 어떻게됩니까? 대신 클래스 B가 가상 메소드를 선언한다고 가정 해 보겠습니다. 이 변경은 상속 체인 (C 및 D 클래스)에 속한 모든 파생 클래스에 대해 함수를 가상으로 만듭니다. 그래서 논리적으로 C와 D의 B는 일종의 "기본 클래스"입니다. 맞습니까? 아니면 내가 틀렸어?
빠른 제안 : 기본 클래스는 가상 메서드가있는 경우,해야 내가 함께 파생 된 클래스에 속하는 가상 메소드의 나머지 부분을 강조 키워드 가상? 그냥 표현력을 높이 려구요. –
필요하지 않습니다. 기본 클래스에서 한 번 수행하면 모든 하위 클래스에서 함수 구현 (모든 상속)을 변경할 수 있습니다. – theta
@RobertEagle 파생 클래스에서'virtual' 또는'override'를 추가하는 것은 필요하지 않습니다 *,하지만 _yes_라고 할 수 있습니다. 가능하면 함수의 시멘틱스를 시각적으로 알려주는 것이 좋습니다. *'g ++'와 같은 컴파일러를 사용하지 않는 한 이러한 한정자가 누락되면 경고를 제공하고 경고는 오류로 간주합니다. –