让我再给予一个例子来说明我的问题:虚拟函数在继承中表现怪异?
#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()
函数。为什么?它不应该执行基地的display()
的功能,因为该对象现在完全是SmartPC的基础的副本?
的另一个问题是,如果我在temp->data;
功能convert()
添加行,它说 PC::Data
是受保护的,但我从派生类范围即SmartPC
访问它,那么为什么不工作?
任何帮助表示赞赏。
您可以提供一个引用Meyers说的地方吗?也许你误解了他。 –