基类指针调用虚函数提示不能访问private成员
#include<iostream>
using namespace std;
class base
{
private:
virtual void view()
{
cout<<"base::view() used\n";
}
};
class derive:public base
{
public:
virtual void view()
{
cout<<"derive::view(const derive & de) used\n";
}
};
int main(void)
{
derive de;
base *bp=&de;
bp->view();//基类的view()函数放到私有部分程序不能运行提示不能访问private成员,放到公有部分,程序可以运行调用的是派生类的虚函数
return 0;
}
我就不明白了,既然它调用的是派生类的函数,为什么将基类的view()函数放到私有部分程序就不能运行,它还要访问基类的什么
[解决办法]
这个前提是,程序得编译通过了,等到运行时进行动态函数寻址的时候,才能够运行派生类的同签名函数,从而达到多态的效果。
[解决办法]
虚函数的动态绑定是在运行时根据动态类型确定的,而要运行,首先得通过编译,而编译器看的是静态类型,bp是base指针,编译器只会看base::view是否满足访问权限。
[解决办法]
编译器只看静态关系.
反过来就可以.
基类public, 子类private