C_C++

C++, 가상 함수의 특징 Features of Virtual Functions

고니자니 2024. 11. 10. 07:49
반응형

C++에서 가상함수(Virtual Function)는 다형성을 구현하기 위해 사용되는 함수입니다. 주로 상속 관계에서 부모 클래스 포인터가 자식 클래스 객체를 가리킬 때, 자식 클래스의 함수를 호출하기 위해 사용됩니다. 이를 통해 동적 바인딩을 실현할 수 있습니다.

 

가상 함수의 특징

  • virtual 키워드로 선언된 함수입니다.
  • 부모 클래스에서 선언된 가상함수는 자식 클래스에서 재정의(Override)될 수 있습니다.
  • 부모 클래스 포인터로 자식 클래스 객체를 가리킬 때, 부모 클래스에 정의된 함수가 아닌 자식 클래스에서 재정의된 함수가 호출됩니다.

예제 코드

아래 예제에서 부모 클래스 Animal에는 가상 함수 sound가 정의되어 있고, Dog와 Cat 클래스가 이를 상속하여 각자의 방식으로 재정의합니다.  가상 함수를 통해 부모 클래스 포인터가 자식 클래스의 함수를 호출하는 동적 바인딩을 보여줍니다.

#include <iostream>
using namespace std;

class Animal {
public:
    virtual void sound() { // 가상 함수 선언
        cout << "Some generic animal sound" << endl;
    }
};

class Dog : public Animal {
public:
    void sound() override { // 가상 함수 재정의
        cout << "Woof! Woof!" << endl;
    }
};

class Cat : public Animal {
public:
    void sound() override { // 가상 함수 재정의
        cout << "Meow! Meow!" << endl;
    }
};

int main() {
    Animal* animal1 = new Dog();
    Animal* animal2 = new Cat();

    animal1->sound(); // Dog 클래스의 sound() 호출
    animal2->sound(); // Cat 클래스의 sound() 호출

    delete animal1;
    delete animal2;

    return 0;
}

(Output)

Woof! Woof!
Meow! Meow!

C++, 가상 함수의 특징

설명

  1. Animal 클래스: sound라는 가상 함수를 가집니다.
  2. Dog와 Cat 클래스: Animal을 상속하며 sound 함수를 재정의합니다.
  3. 다형성: Animal* 포인터 animal1과 animal2는 각각 Dog와 Cat 객체를 가리키지만, animal1->sound()는 Dog 클래스의 sound 함수, animal2->sound()는 Cat 클래스의 sound 함수가 호출됩니다.

 

 

반응형