728x90
가상함수는 기본 클래스에서 선언되고 파생 클래스에서 재정의(override) 될 수 있는 함수이다.
가상 함수를 사용하면, 부모 클래스의 포인터나 참조를 사용하여 자식 클래스의 메서드를 호출 할 수 있으며, 실행 중 객체의 실제 유형에 따라 올바른 메서드가 호출된다.
이를 통해 다형성을 구현할 수 있으며, 코드의 유연성과 재사용성을 향상시킨다.
- 다형성을 지원하며, 객체 실 유형에 따라 다른동작을 수행할 수 있다.
- 기본 클래스에서 기본 동작을 정의하고 자식 클래스에서 필요에 맞게 다시 재정의 가 가능하다.
- 객체 지향 설계 원칙 중 하나인 "개방-폐쇄 원칙"(Open-Closed Principle)를 준수할 수 있다.
단점은 일반 함수보다 오버헤드가 더 많이발생하나, 무시할만한 수준이다.
#include <iostream>
class Animal {
public:
virtual void makeSound() {
std::cout << "Animal makes a sound" << std::endl;
}
};
class Dog : public Animal {
public:
void makeSound() override {
std::cout << "Dog barks" << std::endl;
}
};
class Cat : public Animal {
public:
void makeSound() override {
std::cout << "Cat meows" << std::endl;
}
};
int main() {
Animal* animal1 = new Dog();
Animal* animal2 = new Cat();
animal1->makeSound(); // Output: "Dog barks"
animal2->makeSound(); // Output: "Cat meows"
delete animal1;
delete animal2;
return 0;
}
Animal형 포인터로 Upcasting을 진행하였지만, virtual(가상) 선언이 되어있기 때문에, 업케스팅에도 불구하고 자식Class의 함수가 실행되는것 을 볼 수 있다.
728x90
'컴퓨터 용어 정리' 카테고리의 다른 글
DirectX 3D 행렬연산 (0) | 2023.10.12 |
---|---|
단위행렬(Identity matrix) (0) | 2023.10.12 |
다운 케스팅(Down Casting) (0) | 2023.10.10 |
업 케스팅(Up casting) (0) | 2023.10.10 |
멀티셈플링 Multisampling(표본화) (0) | 2023.10.05 |