C++에서는 범위 지정 연산자(::)를 사용하면 파생 클래스(자식 클래스)의 함수 내부에서 부모 클래스의 함수를 손쉽게 호출할 수 있습니다. 이 기법은 함수 오버라이딩 시 부모 클래스의 원래 동작을 유지하면서 추가 로직을 확장하고 싶을 때 특히 유용합니다.
아래 예제를 통해 구체적인 사용 방법을 살펴보겠습니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
class p1 {
public:
void first() {
cout << "\nThe parent class p1 function is called.";
}
};
class d1 : public p1 {
public:
void first() {
cout << "The derived class d1 function is called.";
p1::first();
}
};
int main() {
d1 d;
d.first();
return 0;
}실행 결과
The derived class d1 function is called. The parent class p1 function is called.
코드 설명
1. 부모 클래스 정의
먼저 부모 클래스 p1을 생성하고, 그 안에 first() 함수를 정의합니다. 이 함수는 호출되면 단순히 메시지를 출력하는 역할을 합니다.
class p1 {
public:
void first() {
cout << "\nThe parent class p1 function is called.";
}
};2. 파생 클래스 정의 및 함수 오버라이딩
다음으로 부모 클래스 p1을 상속받는 파생 클래스 d1을 만듭니다. 이 클래스는 부모 클래스의 first() 함수를 오버라이딩(재정의)하여 자신만의 동작을 수행합니다.
class d1 : public p1 {
public:
void first() {
cout << "The derived class d1 function is called.";
p1::first();
}
};3. 범위 지정 연산자로 부모 함수 호출
핵심은 다음 한 줄입니다. d1 클래스의 first() 함수가 실행되는 도중에, 범위 지정 연산자 ::를 통해 부모 클래스 p1의 first() 함수를 명시적으로 호출합니다.
p1::first();
이처럼 부모클래스이름::함수이름() 형태로 작성하면, 오버라이딩으로 가려진 부모 클래스의 함수에 접근할 수 있습니다. 만약 이 구문 없이 단순히 first();라고 호출했다면 재귀 호출이 발생하여 무한 루프에 빠질 수 있으므로 주의해야 합니다.
정리
C++에서 파생 클래스의 함수 내부에서 부모 클래스의 같은 이름 함수를 호출하려면 범위 지정 연산자(::)를 사용하면 됩니다. 이 방식은 오버라이딩된 함수에서 부모 클래스의 공통 로직을 재사용하고 싶을 때 널리 활용되는 표준적인 패턴입니다.