C++虚函数(9) - 虚函数能否为private

C++中,虚函数可以为private,并且可以被子类覆盖。

例如,下面程序工作正常。

#include<iostream>

class Base {
private:
    virtual void fun() { std::cout << "Base Fun" << std::endl; }
    friend int main();
};

class Derived : public Base {
public:
    void fun() { std::cout << "Derived Fun" << std::endl; }
};

int main() {
    Base* ptr = new Derived;
    ptr->fun();
    return 0;
}

运行结果:
Derived fun()

对于上面的程序,有下面几点是需要注意的方面:
1) ptr是一个Base类型的指针,指向的是Derived对象。最终实际调用的是Derived::fun()。

2) int main()是Base类的友元函数。如果删除这个友元声明,则程序会编译失败。因为在编译期间,会进行权限检查。对于这行代码ptr->fun(), 编译器会检查到fun是私有函数,base类型的对象/指针无权访问。

这种行为与Java完全不同。在Java中,私有方法默认是final的,不能被覆盖。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值