오버라이드는 부모 클래스에 정의되어 있는 메소드를 자손 클래스에서 재정의하는 것을 말합니다.
주의할 점으로는 virtaul 키워드가 붙지않는 메소드의 경우에도 오버라이드가 가능한데, 이 경우에는 부모 클래스 포인터로 인스턴스를 가리켰을 때 부모 클래스에 정의되어 있는 메소드를 호출하게 됩니다.
다형성을 위해서 부모 클래스 포인터로 인스턴스를 가리키고 자손에서 재정의한 메소드를 호출하고자 한다면 virtual 키워드가 붙어있는 가상 메소드로 선언하고 이를 자손 클래스에서 오버라이드해야 합니다.
그리고 C++11부터는 override 키워드와 final 키워드가 지원됩니다.
override 키워드를 사용하는 경우 해당 메소드가 상속 받아서 오버라이딩이 가능한 함수인지를 컴파일러에 의해 확인하도록 명시하는 것이 됩니다.
그리고 final 키워드는 이 메소드가 더 이상 오버라이딩 될 수 없다는 것을 명시합니다. 단, final 키워드의 경우 클래스의 상속 시에도 가능합니다.
기반 클래스 함수가 반드시 가상 함수 이어야한다.
기반 함수와 파생 함수의 이름이 반드시 동일해야한다.
(소멸자 예외)기반 함수와 파생함수의 매개변수 형식들이 반드시 동일해야한다.
기반함수와 파생함수의 const 성이 반드시 동일해야한다.
기반함수와 파생함수의 반환형식과 예외 명세가 호환되어야한다.
멤버 함수들의 참조 한정자(reference qualifier)가 동일해야한다. (C++11 추가)
오버로딩은 같은 이름을 가진 메소드에 다른 인자 혹은 다른 인자 수를 전달받도록 하는 것을 말합니다.
주의할 점으로는 전달받는 인자 부분은 같지만 반환형만 다른 경우는 허용되지 않습니다.
공통점으로는 오버라이드와 오버로딩의 경우 둘 다 다형성을 지원하는 방법에 속합니다.
오버라이드의 경우 동적 다형성을, 오버로딩의 경우 정적 다형성을 지원한다는 것에는 차이점이 있습니다.
동적 다형성은 런타임에 다형성이 존재하는 것을 말합니다.
이는 가상 함수 테이블을 통해 메소드 호출 시 자손 클래스에 재정의되어 있는 메소드부터 차례대로 찾아
해당 메소드를 호출해 주는 방식과 같이 런타임에 다형성이 제공되는 것을 말합니다.
정적 다형성이란 컴파일 타임에 다형성이 완성되는 것을 말합니다.
정적 다형성을 지원하는 또 다른 방법은 템플릿 메타 프로그래밍이 있습니다.
- 동적/정적 다형성
3 동적 다형성과 정적 다형성 비교
두 종류의 다형성을 분류 비교해보자 ### 용어 동적 다형성과 정적 다형성은 여러가지 C++ 프로그래밍 관용구를 지원한다. * 상속에 의해 구현되는 다형성은 한정되고 동적이…
wikidocs.net
'TIL(Today I Learned)' 카테고리의 다른 글
| 250331 TIL - 새로운 팀 프로젝트 시작 (0) | 2025.03.31 |
|---|---|
| 250328 TIL - 람다 함수 (0) | 2025.03.28 |
| 250324 TIL - 모의면접 (0) | 2025.03.24 |
| 250320 TIL - 면접 대비(push_back & emplace_back, TArray와 vector의 차이, CDO, PlayerState, unordered와 ordered의 차이, Endplay / Destroyed, 언리얼 객체의 생성 순서, 언리얼 GC, 액터의 생명 주기, 언리얼에서의 object 관리, GameInstance) (0) | 2025.03.20 |
| 250319 TIL - SourceInsight 사용기 (0) | 2025.03.19 |