맞쳐 예를 제공하여 내 문제를 설명 :가상 함수가 상속에서 이상하게 작동합니까?
#include <iostream>
class PC
{
public:
PC():Data(0)
{
}
virtual void display()
{
std::cout<<"The data is :"<<Data<<std::endl;
}
protected:
int Data;
};
class SmartPC:private PC
{
public:
SmartPC():PC()
{
}
void convert()
{
PC* temp=static_cast<PC*>(this);
temp->display();
}
void display()
{
std::cout<<"The data is (in bb):"<<a<<std::endl;
}
};
int main()
{
SmartPC SmrtPC;
PC* miniPC= static_cast<PC*>(&SmrtPC);
SmrtPC.convert();
}
를 스콧 마이어스에 따르면 static_cast<PC*>(this);
이 SmartPC의 임시 기본 복사본을 생성합니다. 그러나 temp->display();
은 파생 클래스의 display()
함수를 실행했습니다. 왜 이렇게이다? 객체가 이제 완전히 SmartPC베이스의 복사본이기 때문에 base의 display()
의 함수를 실행하면 안됩니까?
또 다른 질문은 내가 선을 temp->data;
기능 convert()
에 추가하면, 그것은 PC::Data
가 보호하지만 SmartPC
즉 파생 클래스 범위에서 액세스하고 말한다, 그래서 왜 작동하지 않는 이유는 무엇입니까?
도움을 주시면 감사하겠습니다.
마이어스가 그 말을 한 것에 대한 인용문을 제공해 주실 수 있습니까? 아마도 당신은 그를 오해했을 것입니다. –