반응형

가상 함수(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

+ Recent posts