首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

基类指针调用虚函数揭示不能访问private成员

2013-05-02 
基类指针调用虚函数提示不能访问private成员#includeiostreamusing namespace stdclass base{private:v

基类指针调用虚函数提示不能访问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

热点排行