class parent
{public:
int x;
int y;
virtual int area()
{
return x * y;
}
};
class child : public parent
{public:
int z;
virtual int area() override
{
return z * x * y;
}
};
int main()
{
child C;
C.x = 2;
C.y = 2;
C.z = 2;
parent* P = &C;
cout << P->area();
}
이러면 부모 클라스 객체의 가상함수 주소에 자녀 클래스에서 선언한 함수가 들어가있어서 자녀함수에서 선언한 area()가 호출되는건 이해했는데
자녀클래스에서만 선언된 변수 z가 뭔줄은 어떻게 알고 계산하는거임? parent 포인터잖아
가상함수들이 배열로 저장되는데 뭔 상관이냐
컴파일러가 가상함수를 가지고 따로 테이블을 만드닌까 거기서 걍 찾아서 실행시키는거임
parent 포인터 변수 P에 실제로는 child 주소가 들어가 있잖아.