Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 파생 클래스 함수에서 부모 클래스 함수를 호출하는 방법

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() 함수가 실행되는 도중에, 범위 지정 연산자 ::를 통해 부모 클래스 p1first() 함수를 명시적으로 호출합니다.

p1::first();

이처럼 부모클래스이름::함수이름() 형태로 작성하면, 오버라이딩으로 가려진 부모 클래스의 함수에 접근할 수 있습니다. 만약 이 구문 없이 단순히 first();라고 호출했다면 재귀 호출이 발생하여 무한 루프에 빠질 수 있으므로 주의해야 합니다.

정리

C++에서 파생 클래스의 함수 내부에서 부모 클래스의 같은 이름 함수를 호출하려면 범위 지정 연산자(::)를 사용하면 됩니다. 이 방식은 오버라이딩된 함수에서 부모 클래스의 공통 로직을 재사용하고 싶을 때 널리 활용되는 표준적인 패턴입니다.