C_C++

C++, 순수가상함수 Pure Virtual Function

고니자니 2024. 11. 11. 18:23
반응형

순수 가상 함수(Pure Virtual Function)는 객체 지향 프로그래밍에서 인터페이스와 유사한 개념을 구현할 때 사용됩니다. 순수 가상 함수는 함수의 선언만 있고, 정의가 없는 함수입니다. **파생 클래스에서 반드시 재정의(override)**해야 하며, 이를 통해 다형성을 구현하는데 도움을 줍니다. 순수 가상 함수를 포함한 클래스를 추상 클래스라고 부르며, 추상 클래스의 인스턴스를 직접 생성할 수 없습니다.

순수 가상 함수의 선언

순수 가상 함수는 함수 선언 끝에 = 0을 추가하여 정의됩니다.

virtual void 함수이름() = 0;

 

예제 코드

아래 예제에서 Shape는 순수 가상 함수를 포함하는 추상 클래스이고, 이를 상속받는 Circle과 Rectangle 클래스에서 순수 가상 함수 draw를 구현합니다.

#include <iostream>
using namespace std;

// 추상 클래스
class Shape {
public:
    virtual void draw() = 0; // 순수 가상 함수
};

class Circle : public Shape {
public:
    void draw() override {
        cout << "Drawing a Circle" << endl;
    }
};

class Rectangle : public Shape {
public:
    void draw() override {
        cout << "Drawing a Rectangle" << endl;
    }
};

int main() {
    // Shape* shape = new Shape(); // 추상 클래스는 인스턴스화할 수 없음
    Shape* shape1 = new Circle();
    Shape* shape2 = new Rectangle();

    shape1->draw(); // Circle의 draw() 호출
    shape2->draw(); // Rectangle의 draw() 호출

    delete shape1;
    delete shape2;

    return 0;
}

(Output)

Drawing a Circle

Drawing a Rectangle

C++, 순수가상함수

설명

  1. Shape 클래스: draw라는 순수 가상 함수를 선언하여 추상 클래스로 만듭니다. 추상 클래스는 직접 인스턴스화할 수 없으므로 Shape 타입의 객체를 생성하려 하면 컴파일 오류가 발생합니다.
  2. Circle과 Rectangle 클래스: Shape 클래스를 상속받고 draw 함수를 재정의합니다. 각각의 클래스에서 서로 다른 형태로 draw 함수를 구현하여, 다양한 도형을 그릴 수 있게 합니다.
  3. 다형성: Shape* 타입의 포인터 shape1과 shape2가 각각 Circle과 Rectangle 객체를 가리키며, shape1->draw()는 Circle 클래스의 draw 함수, shape2->draw()는 Rectangle 클래스의 draw 함수가 호출됩니다.

이 예제는 추상 클래스와 순수 가상 함수를 사용하여 구체적인 구현을 강제하고, 다형성을 통해 다양한 형태의 객체를 다룰 수 있게 하는 방법을 보여줍니다.

 

반응형