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

目录

1.编译期间权限检测

2.运行时的权限


C++允许给子类的成员函数赋予多个限定条件(与Java不同)。

1.编译期间权限检测

下面程序可以正常编译。

#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;
}

编译结果(visual studio 2015):
error C2248: “Derived::fun”: 无法访问 private 成员(在“Derived”类中声明)

2.运行时的权限

下面程序如何?

#include<iostream>

class Base {
public:
    virtual void fun(int i) { std::cout << "Base::fun(int)" << i << std::endl; }
};

class Derived : public Base {
private:
    void 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值