가상 함수(virtual function)
C++에서 가상 함수(virtual function)는 파생 클래스에서 재정의할 것으로 기대하는 멤버 함수를 의미합니다.
이러한 가상 함수는 자신을 호출하는 객체의 동적 타입에 따라 실제 호출할 함수가 결정됩니다.
C++에서 가상 함수는 virtual 키워드를 사용하여 선언합니다
virtual 멤버함수의 원형;
기초 클래스에서 virtual 키워드를 사용해 가상 함수를 선언하면, 파생 클래스에서 재정의된 멤버 함수도 자동으로 가상 함수가 됩니다.
동적 바인딩(dynamic binding)
C++ 컴파일러는 함수를 호출 할 때, 어느 블록에 있는 함수를 호출해야 하고, 해당 함수가 저장된 정확한 메모리 위치까지도 알아야 합니다.
이처럼 함수를 호출하는 코드에서 어느 블록에 있는 함수를 실행하라는 의미로 해석하는 것을 바인딩(binding)이라고 합니다.
하지만 C++에서는 함수가 오버로딩될 수 있으므로 이 작업이 조금 복잡해집니다.
대부분 함수를 호출하는 코드는 컴파일 타임에 고정된 메모리 주소로 변환됩니다.
이것을 정적 바인딩(static binding) 또는 초기 바인딩(early binding)이라고 합니다.
C++에서는 가상 함수가 아닌 멤버 함수는 모두 이러한 정적 바인딩을 하게 됩니다.
하지만 가상 함수의 호출은 컴파일러가 어떤 함수를 호출해야 하는지 미리 알 수 없습니다.
왜냐하면, 가상 함수는 프로그램이 실행될 때 객체를 결정하므로, 컴파일 타임에 해당 객체를 특정할 수 없기 때문입니다.
따라서 가상함수의 경우에는 런 타임에 올바른 함수가 실행될 수 있도록 해야 합니다.
'C, C++' 카테고리의 다른 글
[C/C++] accumulate 사용법과 주의사항 (0) | 2021.07.09 |
---|---|
[C/C++] stringstream 사용법 (0) | 2021.07.03 |
[C/C++]enum과 enum class (0) | 2021.04.05 |
메모리의 구조 (0) | 2020.09.10 |
'Call by value' 와 ' Call by reference'의 차이 (0) | 2020.08.31 |