프로그래밍 공부
작성일
2023. 10. 10. 16:41
작성자
WDmil
728x90

가상함수는 기본 클래스에서 선언되고 파생 클래스에서 재정의(override) 될 수 있는 함수이다.

 

가상 함수를 사용하면, 부모 클래스의 포인터나 참조를 사용하여 자식 클래스의 메서드를 호출 할 수 있으며, 실행 중 객체의 실제 유형에 따라 올바른 메서드가 호출된다.

 

이를 통해 다형성을 구현할 수 있으며, 코드의 유연성과 재사용성을 향상시킨다.

 

  1. 다형성을 지원하며, 객체 실 유형에 따라 다른동작을 수행할 수 있다.
  2. 기본 클래스에서 기본 동작을 정의하고 자식 클래스에서 필요에 맞게 다시 재정의 가 가능하다.
  3. 객체 지향 설계 원칙 중 하나인 "개방-폐쇄 원칙"(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