가상함수

가상함수

  • 가상 함수는 C++에서 다형성(polymorphism)을 구현하기 위한 중요한 개념 중 하나다. 다형성은 동일한 인터페이스를 가진 객체들이 서로 다른 구현을 제공할 수 있도록 하는 프로그래밍 개념이다.

  • 가상 함수는 기본 클래스(Base class)와 파생 클래스(Derived class) 간의 다형성을 지원하는데 사용된다. 기본 클래스에서 선언된 함수를 파생 클래스에서 재정의(override)할 때 사용한다.

Keyword : virtual

#include <iostream>

using namespace std;

class First{
public:
    void MyFunc() const{
        cout<<"FirstFunc"<<endl;
    }
};
class Second : public First{
public:
    void MyFunc() const override{
        cout<<"SecondFunc"<<endl;
    }
};
class Third : public Second{
public:
    void MyFunc() const override{
        cout<<"ThirdFunc"<<endl;
    }
};
int main()
{
    Third *tpt = new Third();
    Second *spt = tpt;
    First *fpt = spt;

    tpt->MyFunc();
    spt->MyFunc();
    fpt->MyFunc();

    return 0;
}
<결과>
ThirdFunc
SecondFunc
FIrstFunc

💡 MyFunc가 가상함수가 아닌경우 위와 같이 포인터 기준으로 함수를 호출함.


#include <iostream>

using namespace std;

class First{
public:
    virtual void MyFunc() const{
        cout<<"FirstFunc"<<endl;
    }
};
class Second : public First{
public:
    void MyFunc() const override{
        cout<<"SecondFunc"<<endl;
    }
};
class Third : public Second{
public:
    void MyFunc() const override{
        cout<<"ThirdFunc"<<endl;
    }
};
int main()
{
    Third *tpt = new Third();
    Second *spt = tpt;
    First *fpt = spt;

    tpt->MyFunc();
    spt->MyFunc();
    fpt->MyFunc();

    return 0;
}
<결과>
ThirdFunc
ThirdFunc
ThirdFunc

💡 MyFunc가 가상함수인 경우, 포인터가 아닌 실제 인스턴스를 기준으로 함수를 호출함.