아마 C++ 처음 입문하는 사람을 위한 자료들에서 이미 부모/자식 클래스의 상속 개념을 많이 소개하기 때문에 조금은 특이한 경우를 정리하고자 한다.
오버라이딩과 오버로딩이 겹치는 경우이다.
예를 들어 부모 클래스에 오버로딩을 통한 두가지 함수가 있다고 가정해보자
class Parent
{
public:
int get() { return 1; }
virtual int get(int num) { return num; }
};
두 함수는 시그니처가 다르기 대문에 오버로딩이 되지만, 자식이 클래스를 상속받을 경우 get이라는 함수의 이름이 가려지기 때문에 int get()함수는 사용할 수 없다... (컴파일도 안됨)
class Child : public Parent
{
public:
virtual int get(int num) { return 1; }
};
int main(int argc, char* argv[])
{
Child c;
c.get(4) // 가능
c.get() // 불가능
}
부모의 가려진 get()함수를 사용하려면 어떻게 해야할까?
class Child : public Parent
{
public:
using Parent::get; // 이 부분
virtual int get(int num) { return 1; }
};
위 코드의 using에 해당하는 코드를 넣어주면 문제가 해결된다.