[c++] 구조체와 클래스의 가상 함수

C++에서 구조체(struct)와 클래스(class)는 유사한 기능을 하지만 가상 함수(virtual function)의 동작에 있어서는 차이점이 있습니다. 이 글에서는 구조체와 클래스에서 가상 함수를 어떻게 다르게 사용하는지에 대해 알아보겠습니다.

구조체(struct)의 가상 함수

구조체는 기본적으로 모든 멤버 함수가 가상 함수가 아닌 것으로 간주됩니다. 따라서 구조체 내부에 가상 함수를 선언하더라도 이는 자동적으로 가상 함수로 간주되지 않습니다.

struct BaseStruct {
    virtual void show() {
        std::cout << "BaseStruct의 show 함수" << std::endl;
    }
};

위 코드의 BaseStruct는 가상 함수인 show를 포함하고 있지만, 이는 명시적으로 virtual로 표시되어야 합니다.

클래스(class)의 가상 함수

반면에 클래스는 가상 함수를 가질 수 있습니다. 클래스 내의 함수가 기본적으로 가상 함수로 간주되지 않기 때문에 가상 함수로 사용하려면 virtual 키워드를 명시적으로 사용해야 합니다.

class BaseClass {
public:
    virtual void show() {
        std::cout << "BaseClass의 show 함수" << std::endl;
    }
};

위 코드의 BaseClass는 가상 함수인 show를 명시적으로 선언하고 있습니다.

정리

C++에서는 구조체와 클래스 간의 가상 함수의 동작에 차이가 있습니다. 구조체 내에서는 명시적으로 가상 함수를 선언해야 하고, 클래스 내에서는 가상 함수를 특별히 선언함으로써 다형성(polymorphism)을 구현할 수 있습니다.

이러한 차이점을 이해하고 적절히 활용함으로써 객체 지향 프로그래밍에서의 유연하고 효율적인 코드를 작성할 수 있습니다.

참고 자료