virtual function
(가상 함수) 개념C++에서 가상 함수(virtual function) 는 다형성(polymorphism) 을 지원하기 위해 사용됩니다. 즉, 기반(Base) 클래스의 포인터 또는 참조를 사용하여 파생(Derived) 클래스의 함수가 호출되도록 하는 메커니즘 이다.
#include <iostream>
using namespace std;
class Base {
public:
virtual void show() { // 가상 함수 선언
cout << "Base 클래스의 show()" << endl;
}
};
class Derived : public Base {
public:
void show() override { // 오버라이딩된 함수
cout << "Derived 클래스의 show()" << endl;
}
};
int main() {
Base* b = new Derived(); // 기반 클래스 포인터로 파생 클래스 객체를 가리킴
b->show(); // "Derived 클래스의 show()" 출력 (가상 함수 덕분)
delete b;
return 0;
}
class Base {
public:
virtual void show(); // 구현 없음!
};
class Derived : public Base {
public:
void show() override {
cout << "Derived 클래스의 show()" << endl;
}
};
int main() {
Base* b = new Derived();
b->show(); // **링커 오류 발생**
delete b;
}
참조 할 수 없는 함수를 참조하여 override 하려고 하기 때문에링커 오류 가 발생한다
추상 클래스(Abstract Class) 만약 특정 메서드가 파생 클래스에서 반드시 오버라이딩되도록 강제하고 싶다면, 순수 가상 함수(pure virtual function) 로 선언할 수 있다
class Base {
public:
virtual void show() = 0; // 순수 가상 함수 -> 추상 클래스
};
int main() {
Base obj; // ❌ 오류! (추상 클래스는 인스턴스 생성 불가능)
}