비디오: Chapter 06. 함수 중복과 static 멤버 - 01 2024
C ++에서 특정 함수 호출이 늦게 바인딩되었다고 생각하기 때문입니다. 하위 클래스에서 같은 인수로 선언하지 않으면 구성원 함수가 가상으로 선언되었는지 여부에 관계없이 다형 적으로 재정의되지 않습니다. 동일한 선언 규칙에 대한 한 가지 예외는 기본 클래스의 멤버 함수가 기본 클래스 객체에 대한 포인터 또는 참조를 반환하면 하위 클래스의 재정의 된 멤버 함수가 하위 클래스의 객체에 대한 포인터 또는 참조를 반환 할 수 있다는 것입니다. 즉, 두 함수의 반환 유형이 다를지라도 makeACopy () 함수는 다형성입니다.
실제로는 아주 자연 스럽다. makeACopy () 함수는 BaseClass::: makeACopy ()
를 재정의 할 수도 있지만 SubClass , 유형의 객체를 반환해야합니다.
재정의 했습니다.
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 ()의 선언은, 이것은 클래스의 가상 메소드 이상에 영향을 미칩니다.
마지막 클래스는 전혀 상속 될 수 없습니다.