C++/Class
2021. 3. 20. 17:34
가상 함수와 다형성 (virtual)
상속 최상위 클래스에서 멤버 함수를 정의할 때
virtual
키워드를 사용하면, 가장 말단까지 오버라이딩된 함수를 찾아서 실행한다.#include <iostream> class A { public: virtual void print() { std::cout << "A" << std::endl; } }; class B : public A { public: void print() { std::cout << "B" << std::endl; } }; class C : public B { public: void print() { std::cout << "C" << std::endl; } }; class D : public C { public: void print() { std::cout << "D" << std::endl; } }; int main() { using namespace std; A a; B b; C c; D d; A& ref1 = c; ref1.print(); B& ref2 = c; ref2.print(); } /* stdout C C */
관습적으로 오버라이딩한 함수의 앞에는
virtual
키워드를 붙이는 편이라고 한다.- 디버깅할 때의 편의성을 위한 것이다.
virtual
은 스택 구조로 함수를 호출하는게 아니라 virtual table에서 찾아서 호출하는 것이다.- 호출이 빈번한 함수에서 사용하면 성능이 저하될 수도 있다.
'C++ > Class' 카테고리의 다른 글
C++ 공변 반환형(Covariant Return Type) (0) | 2021.03.20 |
---|---|
C++ Override, Final (0) | 2021.03.20 |
C++ 다형성의 기본 개념 (0) | 2021.03.20 |
C++ 다형성 (Polymorphism) (0) | 2021.03.20 |
C++ 다중 상속 (0) | 2021.03.20 |