상속된 이름을 숨기는 일을 피하자

Bogoomi·2022년 7월 2일
0

EffectiveC++

목록 보기
16/24

항목33 - 상속된 이름을 숨기는 일을 피하자



요약
C++ 컴파일러는 유효범위 안에서 변수x라는 이름을 만나면 일단
그 컴파일러 자신이 처리하고 있는 지역 유효범위를 뒤져서
같은 이름을 가진 것이 있는가를 알아본다. 있다면 타입 상관없이 가려버린다.
현재 자기위치에 있는 x가 다른 x를 가리는 것이다.

기본적인 C++의 탐색 과정
상속의 상속을 받은 클래스에서 최초상속 멤버함수를 사용하게되면
컴파일러는 어느 것에 대한 이름인지 파악한다.
우선, 지역 유효범위를 내부를 뒤져보고 없다면 첫번째 상속 클래스를 찾아본다.
이 곳 마저 없다면 최초 클래스를 뒤져본다.

어떤 기본클래스로부터 상속을 받으려고 하는데, 오버로드된 함수가 그 클래스에 들어있고
이 함수들 중 몇 개만 재정의하고 싶다면, 각 이름에 대해 using 선언을 붙여 주어야 한다.
순수 가상함수의 경우 상속받은 파생 클래스가 정의하지 않으면 컴파일이 되지 않는것!

상속된 함수에서 이름을 다 가려버려 기본 클래스 함수를 쓸 수 없을 때,
기본클래스명::함수이름()을 사용해 명시적으로 가리켜 호출
할 수 있다. private:라고 하더라도 호출 가능.



잊지말자!

  • 파생 클래스의 이름은 기본 클래스의 이름을 가린다. public 상속에서는 이런 이름가림 현상은 바람직하지 않다.
  • 가려진 이름을 다시 볼 수 있게 하는 방법으로, using 선언 혹은 전달 함수를 쓸 수 있다.
profile
개에에에바알

0개의 댓글