클래스의 멤버 함수
클래스의 멤버 함수는 클래스 내에 존재하지 않고, 메모리 어딘가에 저장된다.
각 객체는 어딘 가에 저장된 멤버 함수를 공용으로 사용.
다음 과 같은 클래스가 있다고 하자.
class AAA:
{
public:
virtual void Func1() { cout << "Func1()" << endl;}
virtual void Func2() { cout << "Func2()" << endl;}
};
class BBB : public AAA
{
public:
virtual void Func1() { cout << "BBB:Func1()"" << endl;}
void Func3() { cout << "Func3()" << endl;}
};
가상함수 테이블
클래스에 한 개 이상의 가상함수를 포함하는 클래스는 클래스가 가상함수 테이블을 만든다.
실제 호출 되어야할 함수의 위치 정보를 담고 있는 테이블
클래스에 가상함수가 포함되면, 가상 함수 테이블이 생성되고, 이 테이블을 참조하여 함수를 호출하기 때문에 실행속도가 미미하게 감소한다.
AAA 클래스의 가상함수 테이블
key | value
void AAA::Func1() | 0x1024 번지
void AAA::Func2() | 0x2048 번지
BBB 클래스의 가상함수 테이블
key | value
void BBB::Func1() | 0x3072 번지
void AAA::Func2() | 0x2048 번지
void BBB::Func3() | 0x4096 번지
AAA 클래스와 BBB 클래스의 Func2는 같은 메모리 공간을 공유한다.
BBB 클래스의 가상함수 테이블에는 AAA 클래스의 Func1에 대한 정보가 없다.
참조
윤성우, 열혈 C++ 프로그래밍, 오렌지미디어.
'아카이빙 > C, C++' 카테고리의 다른 글
상속에서 객체의 생성, 소멸과정 (0) | 2018.05.27 |
---|---|
malloc과 new의 차이 (0) | 2018.05.27 |
struct와 class 차이 (0) | 2018.05.27 |
strcpy와 strncpy (0) | 2018.05.27 |
string과 character 배열 (0) | 2018.05.26 |