继承中的访问控制

proteced例外

派生类通过派生类对象访问受保护成员,不能通过基类对象访问受保护成员。

三种继承方式

public继承维持基类关键字不变。

protected继承把基类里的pubulic设为protected。降级

private继承把基类里的public和protected变为private。降级。

派生类向基类转换的可访问性

class A{};
 
class B:public A{
public:
    void fun(B&obj)
    {
        A obj1 = (A)obj;
    }
};
 
class C:protected A{
public:
    void fun(C&obj)
    {
        A obj1 = (A)obj;
    }
};
 
class D:private A{
public:
    void fun(D&obj)
    {
        A obj1 = (A)obj;
    }
};
 
class E:public B{
public:
    void fun(B&obj)
    {
        A obj1 = (A)obj;
    }
};
 
class F:public C{
public:
    void fun(C&obj)
    {
        A obj1 = (A)obj;
    }
};
 
//从private继承类派生的类不能转换为基类。
class H:public D{
public:
    void fun(D&obj)
    {
        A obj1 = (A)obj;  //error C2247: “A”不可访问,因为“D”使用“private”从“A”继承
                          //error C2243: “类型转换”: 从“D *”到“const A &”的转换存在,但无法访问
    }
};
 
void inherite_test()
{
    A *pb, *pc, *pe, *pd, *pf, *ph;
     
    pb = new B; //public 
    pc = new C; //protected           error C2243: “类型转换”: 从“C *”到“A *”的转换存在,但无法访问    
    pd = new D; //private             error C2243: “类型转换”: 从“D *”到“A *”的转换存在,但无法访问
    pe = new E; //public + public
    pf = new F; //protected + public  error C2243: “类型转换”: 从“F *”到“A *”的转换存在,但无法访问    
    ph = new H; //private + public    error C2243: “类型转换”: 从“H *”到“A *”的转换存在,但无法访问
}
--------------------- 
作者:liufei_learning 
来源:CSDN 
原文:https://blog.csdn.net/liufei_learning/article/details/21587085 
版权声明:本文为博主原创文章,转载请附上博文链接!

1.测试函数说明只有一直公有继承,才说明能在用户代码访问类型转换,印证了规则的第一条

2.B,C,D类都可以访问类型转换,印证了第二条规则

3.E,F,H类,印证了第三条

类的用户

类的实现者:就是自己

普通用户:就是外部调用者

派生类:就是类的孩子

看情况把成员分为三种权限。

友元关系不能继承

基类友元只能访问基类和派生类的基类部分(权限基类控制),派生类友元不能通过基类对象访问基类成员(权限派生类控制)

友元关系不能继承,不能跨界

struct和class区别

1.默认类继承级别

2.默认成员访问说明符

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值