c++ override 예제

c++ override 예제

Uncategorized -

다음 예제에서 더 명확 합니다: 멤버 함수 선언 또는 정의에서 재정의 함수가 가상이며 기본 클래스에서 가상 함수를 재정의하고 있는지 확인합니다. 프로그램이 잘못 형성되어(컴파일 타임 오류가 생성) 그렇지 않은 경우. 컨텍스트에 민감한 키워드 재정의 및 final을 사용하여 가상 함수의 재정의를 명시적으로 관리할 수 있습니다. 특히 키워드 재정의는 개체 계층구조에서 버그를 찾기 어려운 많은 문제를 해결합니다. 그 결과는 구문적으로 는 하지만 시상적으로 올바른 프로그램이 아닙니다. 이 프로그램은 올바른 방법으로 잘못된 물건을 수행합니다. final은 두 가지 사용 사례를 지원합니다. 첫째, 재정의 할 수없는 메서드를 선언 할 수 있습니다. 둘째, 파생할 수 없는 클래스를 정의할 수 있습니다. 컴파일러는 메서드가 기본 클래스의 메서드를 재정의하는지 여부를 결정하기 위해 재정의하는 경우와 동일한 규칙을 사용합니다. 물론 최종 메서드의 재정의를 억제해야 하기 때문에 전략은 다른 방식으로 진행됩니다. 따라서 컴파일러는 메서드의 매개 변수, 반환 형식 및 const/volatile 한정자를 확인합니다.

재정의 지정기는 컴파일러와 판독기 모두에 사용되는 함수가 실제로 해당 기본 클래스에서 메서드를 재정의하고 있음을 알려줍니다. 내 의견으로는 C ++11의 재정의 지정을 사용하는 것은 깨끗한 코딩 원칙의 일부입니다. 그것은 저자의 의도를 밝혀, 그것은 코드를 더 읽기 쉽게 하고 빌드 시간에 버그를 식별하는 데 도움이됩니다. 적당히 사용하지 않고 사용! 대부분의 경우 코드의 동작이 변경되지 않는 것이 사실이지만, 실제로 실수를 할 때 재정의를 사용하면 컴파일이 실패하므로 버그가 있는 코드를 체크 인한 검사가 중단됩니다. 그리고 우리 중 누구도 컴파일조차하지 않는 코드를 체크 인하지 않습니까? 함수 재정의는 동일한 시그니처 즉 반환 형식 및 매개 변수를 가진 파생 클래스의 기본 클래스 함수를 재정의하는 것입니다. 그러나 프로그래머가 해당 함수를 재정의하는 동안 실수를 하는 상황이 있을 수 있습니다.