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化了
  • 相关阅读:
    特别实用的 6 款 Python 特殊文本格式处理库推荐
    小白版Python环境搭建,还不会你就掐死小编吧(建议收藏)
    Python抓取网页数据的终极办法
    Neo4j CQL -(17)- NULL值
    Neo4j CQL -(16)- 合并
    Neo4j CQL -(15)- LIMIT和SKIP子句
    Neo4j CQL -(14) -UNION联合
    Neo4j CQL
    Neo4j CQL
    Neo4j CQL
  • 原文地址:https://www.cnblogs.com/crazycodehzp/p/3355011.html
Copyright © 2011-2022 走看看