🪄
가상함수(Virtual)
January 01, 2024
가상함수
가상함수
-
가상 함수는 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가 가상함수인 경우, 포인터가 아닌 실제 인스턴스를 기준으로 함수를 호출함.