C++继承(4) - 给子类的成员函数赋予多个限定条件

来源:互联网 发布:淘宝客领取优惠券 编辑:程序博客网 时间:2024/05/17 13:13
与Java不同,C++允许给子类的成员函数赋予多个限定条件。
下面程序可以正常编译。
#include<iostream>class Base {public:    virtual int fun(int i) { std::cout<<"Base: "<<i<<std::endl; }};class Derived: public Base {private:    int fun(int x)   { std::cout<<"Derived: "<<x<<std::endl; }};int main(){}

基于上述程序,如果修改main函数如下,则会编译失败,因为fun()是私有函数,Derived对象无权访问。
int main(){    Derived d;    d.fun(1);   //编译失败。无法访问私有函数    return 0;}

下面程序如何?
#include<iostream>class Base {public:    virtual int fun(int i) { std::cout<<"Base::fun(int) "<<i<<std::endl; }};class Derived: public Base {private:    int fun(int x)   { std::cout<<"Derived::fun(int) "<<x<<std::endl; }};int main(){    Base *pb = new Derived;    pb->fun(123);    return 0;}
输出:
Derived::fun(int) 123

上述程序中,函数 “Derived::fun(int )”通过一个基类指针进行了调用。程序可以正常运行,这是因为fun()是基类的一个公有函数。Base类的对象可以访问。

访问权限是在编译期间检测的。而在运行时期间,只管去调用指针所指向对象的相关的函数,而不会去检查访问权限。因此,通过一个基类指针,可以访问子类的private私有函数。

0 0