• 了解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化了
  • 相关阅读:
    Chapter 23: Termination Handlers(2)Understanding Termination Handlers by Example(6)
    【原】常用HTML
    [导入]化州特产~
    [导入]又大一岁,自己祝自己生日快乐~
    [导入]新视觉LOGO~
    [导入]看清楚中国移动的新旧资费
    [导入]AJAX .NET版本之间的区别
    泛型简介
    关于MongoDB的group分组
    【javascript继承】之——原型链继承和类式继承
  • 原文地址:https://www.cnblogs.com/crazycodehzp/p/3355011.html
Copyright © 2020-2023  润新知