>  기사  >  백엔드 개발  >  C++11의 새로운 기능 - 다형성 및 가상 함수, 재정의 지정자

C++11의 새로운 기능 - 다형성 및 가상 함수, 재정의 지정자

php是最好的语言
php是最好的语言원래의
2018-08-01 14:11:432384검색

다형성과 가상 함수

다형성은 C++의 중요한 기능 중 하나이자, 초보자가 이해하기 어려운 기능이기도 합니다. 먼저 간단한 예를 살펴보겠습니다.

C++11의 새로운 기능 - 다형성 및 가상 함수, 재정의 지정자

코드는 매우 간단합니다. 작성자의 말에 따르면 위 코드에서 다형성의 기능에 대한 핵심 사항을 설명하면 안 됩니다. 더 간단하게, 주 함수부터 시작합니다:

  1. 기본 클래스에 대한 포인터

  2. 파생 클래스의 객체를 가리킵니다.

  3. 파생 클래스는 기본 클래스에 정의된 가상 함수를 포괄합니다.

이 세 가지 사항은 필수 조건이며 하나는 필수입니다.

위 코드에는 다른 흥미로운 내용이 있습니다. 결과에 영향을 미치지는 않지만 그래도 이해하는 것이 좋습니다. 파생 클래스에서 기본 클래스의 가상 함수를 재정의(오버라이딩)하는 경우:

  1. virtual 키워드가 필요하지 않습니다

  2. 함수를 공개로 선언할 필요는 없습니다

실패 덮기

가상 함수를 덮어쓰려면 두 함수의 서명이 일관되어야 합니다. 예를 들어, 다음 코드는

C++11의 새로운 기능 - 다형성 및 가상 함수, 재정의 지정자

sub2::f1의 서명이 base::f1의 서명과 일치하지 않으므로 다형성을 달성할 수 없습니다.

어쩌면 이 오류가 너무 명백하고 절대 발생하지 않을 것이라고 생각할 수도 있습니다. 이는 이 예제의 멤버 함수가 너무 단순하기 때문입니다. 실제 개발에서는 개발 규모가 확장됨에 따라 클래스의 상속 관계가 점점 더 깊어지고 멤버 함수의 매개 변수도 점점 더 많아질 것입니다. 파생 클래스에 정의된 멤버 함수의 서명 및 재정의를 자주 접하게 됩니다. 개체의 서명이 일치하지 않아 덮어쓰기가 실패합니다.

그리고 끔찍한 점은 이러한 종류의 오류는 컴파일 오류를 생성하지 않으며 찾기가 쉽지 않다는 것입니다.

override 지정자

이 문제를 해결하기 위해 C++11에 메서드가 도입되었습니다. 파생 클래스에서 재정의 함수를 선언하고 정의할 때 재정의 지정자를 사용하세요.

C++11의 새로운 기능 - 다형성 및 가상 함수, 재정의 지정자

명시적인 함수 의도로 인해 이므로 컴파일러가 기본 클래스에서 동일한 시그니처를 가진 가상 함수를 찾을 수 없으면 컴파일 오류가 발생합니다.

저자는

언어 자체의 기능을 더 잘 활용하고 오류를 자동으로 감지할 수 있는 기회를 포기하지 않는 것이 C++ 프로그래머의 습관이 되어야 한다고 생각합니다. 장인 정신의 구현이라고도 볼 수 있습니다.

관련 기사:

c++11 최종 및 재정의 지정자에 대해 자세히 설명

C++11의 새로운 기능에서 auto와 decltype의 차이점과 연결

관련 동영상:

Android 6.0의 새로운 기능

위 내용은 C++11의 새로운 기능 - 다형성 및 가상 함수, 재정의 지정자의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.