virtual 함수 (가상함수)는 정적이 아닌 동적으로 실행된다.
함수를 실행시 virtual펑션 테이블(포인터)을 찾고 테이블안에 함수 포인터를 사용한다.
다형성 사용시 자식 클래스에도 virtual펑션 테이블(포인터)가 생긴다.
동적바인딩 될때 오버라이딩된 함수는 자식 테이블 함수 주소 값을 가진다.
virtual을 사용하면 sizeof()로 확인시 포인터 메모리까지 할당되는 걸 볼 수 있다.
#include <iostream>
using namespace std;
class Base
{
public:
virtual void fun1() {};
void fun2() {};
};
class Der : Base
{
public:
void fun1() {};
void fun3() {};
};
int main()
{
cout << sizeof(Base) << endl;
cout << sizeof(Der) << endl;
return 0;
}
'개발 소발 > 개발 C++(기초)' 카테고리의 다른 글
c++ 다이아몬드 상속문제 해결 (0) | 2019.09.30 |
---|---|
c++ 순수가상함수,추상기본클래스,인터페이스 (0) | 2019.09.30 |
c++ 정적,동적바인딩 (0) | 2019.09.30 |
c++ 가상소멸자 (0) | 2019.09.23 |
c++ override,final,공변 반환값 (0) | 2019.09.23 |