개인 재정 C ++ 프로그래밍 : 가상 함수가 아닌 것은 언제입니까? - C ++에서

C ++ 프로그래밍 : 가상 함수가 아닌 것은 언제입니까? - C ++에서

비디오: Chapter 06. 함수 중복과 static 멤버 - 01 2024

비디오: Chapter 06. 함수 중복과 static 멤버 - 01 2024
Anonim

C ++에서 특정 함수 호출이 늦게 바인딩되었다고 생각하기 때문입니다. 하위 클래스에서 같은 인수로 선언하지 않으면 구성원 함수가 가상으로 선언되었는지 여부에 관계없이 다형 적으로 재정의되지 않습니다. 동일한 선언 규칙에 대한 한 가지 예외는 기본 클래스의 멤버 함수가 기본 클래스 객체에 대한 포인터 또는 참조를 반환하면 하위 클래스의 재정의 된 멤버 함수가 하위 클래스의 객체에 대한 포인터 또는 참조를 반환 할 수 있다는 것입니다. 즉, 두 함수의 반환 유형이 다를지라도 makeACopy () 함수는 다형성입니다.

클래스 Base {public: // 현재 객체의 복사본을 반환합니다. Base * makeACopy ();}; class SubClass: public Base {public: // 현재 객체의 복사본을 반환합니다. SubClass * makeACopy ();}; void fn (Base & bc) {Base * pCopy = bc. makeACopy (); // continue on …}
실제로는 아주 자연 스럽다. makeACopy () 함수는 BaseClass::: makeACopy ()

를 재정의 할 수도 있지만 SubClass , 유형의 객체를 반환해야합니다.

함수가 무시 될 때 자동으로 결정하는이 비즈니스는 C ++에서 오류의 원인입니다. 2011 표준은 프로그래머가 기본 클래스 함수를 재정의하려는 의도를 나타 내기 위해 사용할 수있는 설명자를 도입하여

재정의 했습니다.

C ++은 함수가 재정의한다고 선언되었지만 실제로 다음 예제와 같이 어떤 이유로 인해 기본 클래스 함수를 재정의하지 않는 경우 (컴파일러가 일치하지 않는 경우와 같이) 컴파일러 오류를 생성합니다. >

클래스 학생 {public: virtual void addCourseGrade (double grade);}; GradStudent 클래스: public Student {public: virtual void addCourseGrade (float grade) override;};

이 스 니펫은 GradStudent:: addCourseGrade (float) 메소드가 오버라이드 선언 되었기 때문에 컴파일 타임 오류를 생성하지만 사실은 기본 클래스 함수 Student:: addCourseGrade (double)를 오버 라이드하지 않습니다. t 일치.

최종

키워드를 사용하여 함수를 override 할 수없는 것으로 선언 할 수도 있습니다. 단, 다음 기본

> PostDoc 클래스: 클래스 GradStudent: 공립 학생 {public: virtual void addCourseGrade (double grade) final;}; PostDoc 클래스: public GradStudent {public: virtual void addCourseGrade (double grade);}; Student:: addCourseGrade ()는 Student

메소드를 오버라이드 (override)하려고 시도하기 때문에, PostCore:: addCourseGrade ()의 선언은

, 이것은 클래스의 가상 메소드 이상에 영향을 미칩니다.

마지막 클래스는 전혀 상속 될 수 없습니다.

C ++ 프로그래밍 : 가상 함수가 아닌 것은 언제입니까? - C ++에서

편집자의 선택

왜 IOS 응용 프로그램을 개발합니까? - 인형

왜 IOS 응용 프로그램을 개발합니까? - 인형

IOS 앱을 개발해야하는 이유는 무엇입니까? 넌 할 수 있으니까. 왜냐하면 그들은 재미 있기 때문입니다. 그리고 시간이 왔기 때문에. iOS 앱은 계속해서 파열되고 있으며, 많은 개발자들이이 앱을 성공적으로 사용하고 있습니다. iOS 앱을 개발하는 것은 시간 투자가 거의없이 몇 년 동안 자신의 경력에서 가장 재미있을 수 있습니다.

Windows Phone 7 애플리케이션 개발 Dummies 치트 시트 - 인형

Windows Phone 7 애플리케이션 개발 Dummies 치트 시트 - 인형

Windows Phone 7에서 실행할 응용 프로그램에 대한 새로운 아이디어는 Microsoft 웹 사이트에서 무료 Windows Phone Developer Tools를 다운로드하여 시작하십시오. 이 프로세스는 다운로드를 시작하기 전에 PC에서 가지고있는 것을 살펴 봅니다. 이미 더 나은 버전이있는 경우를 대비하여 ...

Android 용으로 개발해야하는 이유는 무엇입니까? - 인형

Android 용으로 개발해야하는 이유는 무엇입니까? - 인형

진짜 질문은 "안드로이드를 개발하지 않겠습니까? "전 세계 수백만 명의 사용자가 앱을 사용할 수있게하려는 경우 또는 작성 및 테스트를 마친 후 앱을 게시하려는 경우 또는 개방형 플랫폼에서 개발하려는 경우 답변을 얻을 수 있습니다. 그러나 당신이 ...

편집자의 선택

TestDriveController를 가지고 나면 iOS 앱 - 더미에 액션을 추가하는 방법

TestDriveController를 가지고 나면 iOS 앱 - 더미에 액션을 추가하는 방법

IOS 앱에 표시되는 인터페이스는 Assistant Editor에서 자동으로 표시하거나 점프 바를 사용하여 탐색 할 수 있으므로 작업을 작성하는 실제 비즈니스는 매우 간단합니다. Interface Builder 편집기에서 관심있는 요소 (Test ...

편집자의 선택

Word 2010에서 테마를 수정하거나 만드는 방법 - dummy

Word 2010에서 테마를 수정하거나 만드는 방법 - dummy

Word 2010에서는 허용되지 않습니다. 자신 만의 테마를 처음부터 만들 수 있지만 기존 테마를 수정하여 나만의 맞춤 테마를 만들 수 있습니다. 기존 테마 색 및 글꼴을 수정하여 시작하십시오. 사용자 정의 색 테마를 작성하려면 다음을 수행하십시오. 색상 → 새 테마 색 작성을 선택하십시오. 새 테마 색 만들기 대화 상자를 사용하여 선택하고 ...

Word 2016에서 표 셀을 병합하는 방법 -

Word 2016에서 표 셀을 병합하는 방법 -

두 개의 셀을 결합하는 완전히 합리적인 방법 Word 2016 표를 하나 또는 두 개의 셀로 나눠서 표 그리기 도구를 사용하는 것입니다. 천국은 다른 방식으로 세포를 합병하거나 쪼개기로 결심한다면 자비를 베푸십시오. 두 개의 셀을 결합하려면 줄을 지우십시오.

Word 2007에서 기존 템플릿을 수정하는 방법 - 인형

Word 2007에서 기존 템플릿을 수정하는 방법 - 인형

두 가지 방법 : 템플릿에서 직접 변경하거나 템플릿을 기반으로하는 문서를 변경하여 간접적으로 수정할 수 있습니다. 두 번째 방법은 스타일 변경과 같은 템플릿 변경 만 적용합니다. 기존 Word 수정 ...