zoukankan      html  css  js  c++  java
  • 了解protected 以及公用、私有和受保护的继承

    protected成员
    可以认为protected访问标号是private 和public 的混合:
    1.像private成员一样,protected成员不能被类的用户访问.
    2.像public成员一样,protected成员可被该类的派生类访问.
     
    此外,protected还有另一个重要性质:
    派生类只能通过派生类对象访问其基类的protected成员,派生类对其基类类型对象的protected成员没有特殊访问权限.
    少量的理解:
     
    #include "stdafx.h"
    #include<iostream>
    using namespace std;
     
    class Ctest
    {
    public:
    Ctest(int a=1,int b=2,int c=3):pub(a),pro(b),pri(c){}
    int pub;
    void retprotected()
    {cout<<pro<<endl;}
    protected:
    int pro;
    void prof(){cout<<"CtestProtected fun"<<endl;}
    private:
    int pri;
    };
     
    class TDer: public Ctest
    {
    public:
    TDer(int a=1,int b =2,int c =3,int d =4):Ctest(a,b,c),Tpri(d)
    {
    //cout<<pri<<endl;//派生类不能访问积累的private对象
    prof();//派生类可以访问基类的protected
    }
     
    void retprotected2()
    {
    //cout<<pri<<endl;//此处不能用,因为不能访问基类的private
    cout<<pro<<endl;//派生类可以访问基类的protected
    cout<<Tpri<<endl;//访问自身的private
    }
    private:
    int Tpri;
    };
     
    int _tmain(int argc, _TCHAR* argv[])
    {
     
    TDer Ttest(11,22,33,44);
    //cout<<Ttest.pro<<endl;//这里是不可以访问的.和private成员一样,protected成员不能被类的用户访问
    return 0;
    }
     
     
    公用、私有和受保护的集成
    每个类控制它所定义的成员的访问。派生类可以进一步限制但不能放松对所继承的成员的访问。
     
    无论派生列表中是什么访问标号,所有继承Base的类对Base中的成员具有相同的访问。派生访问标号将控制派生类的用户对从Base继承而来的成员的访问.
    class Base
    {
    public:
    void basemem();
    protected:
    int i;
    };
     
    struct Public_derived:public Base
    {
    int use_base(){return i;}//这里.可以访问基类的protected
    };
     
    struct Private_derived:private Base{
        int use_base(){return i;}//同样,这样也可以访问i
    };
     
    如下:
    Base b;
    public_derived d1;
    Private_derived d2;
    b.basemen();//可以
    d1.basemem();//可以
    d2.basemem();//这是错误的,因为Private_derived是私有继承.导致的事Private_derived中的成员private化了
  • 相关阅读:
    一个list<Map>里map其中的一个字段的值相同,如何判断这个字段相同,就把这个map的其他字段存入另一个map中
    ES6---箭头函数()=>{} 与function的区别
    VSCode代码格式化快捷键及保存时自动格式化
    NoClassDefFoundError: com/fasterxml/jackson/databind/exc/InvalidDefinitionException
    响应数据中文乱码
    tomcat将静态资源写入到浏览器乱码问题
    mark一款全局搜索工具,可以搜索文本内容
    mpvue 开发微信小程序搭建项目
    h5返回上一页ios页面不刷新
    微信小程序去除页面滚动条
  • 原文地址:https://www.cnblogs.com/crazycodehzp/p/3355011.html
Copyright © 2011-2022 走看看