C++ Overriding

OpenJR·2024년 4월 4일

아마 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에 해당하는 코드를 넣어주면 문제가 해결된다.

profile
Jacob

0개의 댓글