class BaseClass{
public:
int a;
char buf[250];
void abcd(){
cout<<"hello base from abcd";
}
virtual void defg(){
cout<<"hellow base from defg";
}
};
class DerivedClass: public BaseClass{
public :
int b;
char bufb[255];
void bcde(){
cout<<"hello base from bcde";
}
virtual void defg(){
cout<<"hellow base from defg";
}
};
int main(){
BaseClass* bas=new BaseClass();
DerivedClass* der;
der=static_cast<DerivedClass*>(bas);
cout<<"address of der ="<<der <<" base= "<<bas<<endl;
der->bcde();
cout<<endl<<"Base size:"<< sizeof(*bas)<<" Derived size:"<<sizeof(*der)<<endl;
getch();
return 0;
}
기본 클래스 개체에 대한 파생 클래스 포인터는 어떻게 파생 클래스의 메서드를 호출 할 수 있습니까? 왜 그리고 어떻게? 메모리에서 생성 된 기본 클래스 개체는 기본 클래스 크기에 불과하므로 파생 클래스 메서드를 어떻게 포함 할 수 있습니까? 성공적으로 호출되었습니다.
출력 : ==>
der의 주소 = 002585A8 base = 002585A8
bcde의 hello base
기본 크기 : 260 파생 크기 : 520
컴파일러는 순수하게 형식 정보를 기반으로 비가 상 메서드 bcde를 바인딩했습니다. 메서드가 객체 내용을 참조하지 않기 때문에 메모리 레이아웃이 작동하지 않았습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다