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

C++ 순수 가상 함수를 0으로 초기화하는 이유는 무엇일까?

C++ 순수 가상 함수란?

순수 가상 함수(pure virtual function)는 C++에서 함수의 정의(구현부) 없이 선언만 하는 가상 함수를 말합니다. 선언할 때 함수 이름 뒤에 = 0을 붙여 표시하는 것이 특징입니다.

그렇다면 왜 하필 0을 대입할까요? 사실 여기에는 복잡한 기술적 비밀이 숨어 있지 않습니다. = 0은 실제로 0이라는 값을 함수에 대입하는 연산이 아니라, "이 함수는 순수 가상 함수다"라고 컴파일러와 프로그래머에게 알려주는 특수한 문법(syntax)일 뿐입니다. 그 이상의 의미는 없습니다.

순수 가상 함수가 필요한 이유

순수 가상 함수는 다음과 같은 상황에서 유용하게 사용됩니다.

  • 추상 클래스 설계: 순수 가상 함수를 하나라도 포함한 클래스는 추상 클래스(abstract class)가 되어 객체를 직접 생성할 수 없습니다.
  • 인터페이스 강제: 파생 클래스가 반드시 해당 함수를 오버라이드(재정의)하도록 강제하여 일관된 인터페이스를 보장합니다.
  • 다형성 지원: 기반 클래스의 포인터나 참조를 통해 파생 클래스에서 구현한 함수를 호출할 수 있습니다.

예제 코드

#include<iostream>
using namespace std;

class B {
public:
    virtual void s() = 0; // 순수 가상 함수
};

class D : public B {
public:
    void s() {
        cout << "Virtual Function in Derived class\n";
    }
};

int main() {
    B *b;
    D dobj;
    b = &dobj;
    b->s();
}

실행 결과

Virtual Function in Derived class

코드 설명

클래스 B의 멤버 함수 s()= 0으로 선언된 순수 가상 함수입니다. 따라서 B는 추상 클래스가 되어 객체를 직접 생성하려 하면 컴파일 오류가 발생합니다.

대신 B 타입의 포인터 b를 선언하고, s()를 오버라이드한 파생 클래스 D의 객체 주소를 대입했습니다. 그 결과 b->s()를 호출하면 파생 클래스에서 구현한 함수가 실행됩니다. 이것이 순수 가상 함수를 활용해 다형성(polymorphism)을 구현하는 전형적인 패턴입니다.