본문 바로가기
C++/기초

C++ 기초 : 오버라이딩

글: 시플마 2024. 5. 3.

오버라이딩(Overriding)은 부모 클래스의 멤버 함수와

자식 클래스의 멤버 함수가 함수명,

인자의 개수와 자료형 등 완벽하게 일치할 때

발생합니다.

 

 

아래 코드에서 

 

부모 클래스와 자식 클래스의 멤버 함수를 보시면

Output이라는 똑같은 함수가 존재합니다.

 

 

이는 일반적인 클래스에서는 불가능한 일이죠?

 

원래라면 함수명이 달라야 하죠.

아니면 함수명을 똑같이 하되, 인자의 개수나 자료형을

다르게 설정해야 오버로딩이 되면서 오류가 발생하지 않습니다. 

 

 

하지만 위 코드처럼 상속 관계인 클래스끼리는

완전히 같은 함수를 보유할 수 있습니다. 

 

이런 것이 가능한 이유는 48번째 줄의 코드처럼

자식 클래스로 만든 객체로 부모 클래스와 자식 클래스에

모두 존재하는 Output이라는 함수를 호출하였을 때,

자식 클래스의 Output 함수의 우선 순위가 더 높기 때문입니다.

 

만약 자식 클래스에 Output 함수가 없었다면 

부모 클래스에 있는 Output 함수가 호출됐겠죠?

 

 

그럼 이렇게 상속 관계를 지닌 클래스끼리

함수명, 인자 개수나 자료형이 완전히 같은 함수를

사용할 수 있게 한 이유,

즉 오버라이딩이 가능한 무엇일까요?

 

아래 그림과 같은 상속 관계가 있습니다.

 

동물을 표현하기 위한 부모 클래스와

이 동물이라는 특징을 그대로 계승하면서

각각의 특징을 더 추가한 조류, 어류, 포유류라는

자식 클래스가 있습니다.

 

동물이라는 부모 클래스에 다리의 개수를

출력하는 함수가 있다고 합시다.

 

그럼 나머지 자식 클래스도 이를 물려받았기 때문에

다리의 개수를 출력하는 함수를 호출할 수 있겠죠?

 

 

근데 여기서 어류라는 자식 클래스에서 

해당 함수를 그냥 사용하기에는 어류의 다리 개수를

출력할 수 있는 경우가 별로 없다는 생각이 들어

해당 함수를 변형하고 싶습니다.

 

그럴 때 어류라는 클래스에서 다리 개수를

출력하는 함수를 재정의하여, 즉 오버라이딩하여

사용할 수 있겠죠.

 

 

 


강의 출처 : https://www.youtube.com/watch?v=PCKhmKE3uGs&list=PL4SIC1d_ab-aOxWPucn31NHkQvNPHK1D1&index=82


 

'C++ > 기초' 카테고리의 다른 글

C++ 기초 : 다형성 (1)  (0) 2024.05.04
C++ 기초 : 상속 (2)  (0) 2024.05.04
C++ 기초 : 상속 (1)  (0) 2024.05.03
C++ 기초 : tree (10)  (0) 2024.05.03
C++ 기초 : tree (9)  (0) 2024.05.02