虚函数派生类与基类访问权限不同

访问权限的作用仅在程序编译期(由编译器控制),一旦超出编译期进入执行期(程序脱离编译器控制),访问权限则消失的无影无踪(即在真实内存中没有任何访问权限设置痕迹)。

所以在基类的虚函数访问权限决定了编译器在编译 pf->func(),这样指令时给不给你访问,它只能检测是你基类的指针/引用调用了虚函数,不知道指针/引用的基类还是子类,更不知道虚函数表里的有没有重写更改地址。在运行时编译器无权设置访问权限。

结论:

实现多态时,虚函数能不能访问看基类是不是public访问权限,与派生类的虚函数访问权限无关。

(不实现多态被认为是子类还是要检查的)

class A

{

public: 

  virtual void f()

  {

    cout<<"A::f()"<<endl;

  }

};



class B : public A

{

private:

   virtual void f()

  {

    cout<<"B::f()"<<endl;

  }

};



A* pa = (A*)new B;

pa->f();

输出:B::f()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值