[C++] Virtual Function (가상 함수)
2021. 8. 20. 02:35
728x90
반응형
이번 포스팅에서는 Virtual Funcction (가상 함수) 사용법을 포스팅한다.
Virtual Function (가상 함수)
가상 함수란 상속되는 자식 클래스에서 재정의 될 것으로 예상을 하는 멤버 함수이다. 이런 가상 함수는 Dynamic Polymorphism에 의한 동적 타입에 의해서 결정이 된다.
다음 코드는 일반 멤버 함수를 virtual function으로 정의한 예시를 보여주는 코드이다.
#include <iostream>
class Animal
{
public:
void print()
{
std::cout << "I am Animal" << std::endl;
}
virtual void speak()
{
std::cout << "Animal" << std::endl;
}
};
class Dog : public Animal
{
public:
void print()
{
std::cout << "I am Dog" << std::endl;
}
void speak() override
{
std::cout << "woof" << std::endl;
}
};
int main()
{
Animal* Ptr1;
Animal* Ptr2;
Ptr1 = new Dog();
Ptr2 = new Animal();
Ptr1->print();
Ptr1->speak();
Ptr2->print();
Ptr2->speak();
}
위 코드에서 먼저 Animal *형 변수 Ptr1과 Ptr2를 생성하였다. Ptr1은 Dog객체를, Ptr2는 Animal객체를 가리킨다. 클래스에서 각 클래스에서 print()는 non-virtual 멤버 함수이며 speak()는 virtual 멤버 함수이다. 각 포인터 변수의 타입은 Animal* 타입이기 때문에 어떤 클래스 객체를 가리키고 있던 print() 멤버 함수는 non-virtual 하기 때문에 Animal클래스의 print() 멤버 함수를 호출하게 된다. 하지만 virtual 함수인 speak() 멤버 한수는 가리키고 있는 객체에 speak() 멤버 함수가 재정의 되어있다면 재정의된 함수를 호출하게 된다.
반응형
'Modern C++' 카테고리의 다른 글
[C++] Pure Virtual Function (순수 가상 함수), Abstract Class (추상 클래스) (0) | 2021.08.20 |
---|---|
[C++] Virtual Table (가상 테이블)과 Dynamic Polymorphism (동적 다형성) (0) | 2021.08.20 |
[C++] Class Access Specifier (클래스 접근 제한자) (0) | 2021.08.20 |
[C++] Class Keywords (클래스 키워드) : const, explicit (0) | 2021.08.19 |
[C C++] Overloading (오버 로딩) (0) | 2021.08.19 |