zoukankan      html  css  js  c++  java
  • C++ 类的继承一(访问控制)

    //类的继承
    #include<iostream>
    using namespace std;
    
    /*
    面向对象中的继承类之间的父子关系
    1.子类拥有父类所有的成员属性和成员函数(包括私有成员变量)
    2.子类就是一种特殊的父类
    3.子类对象可以当作父类对象使用
    4.子类可以拥有父类没有的方法和属性
    
    c++中的类成员访问级别(public,protected,private)
    
    类成员访问级别设置原则
    1.需要被外界访问的成员直接设置为public
    2.只能在当前类中访问的成员设置为private
    3.只能在当前类和子类中访问的成员设置为protected,protected的成员访问权限介于public和private之间
    
    
    
    判断类成员变量访问权限三步骤
    1.看调用语句写在子类的内部还是外部
    2.看子类如何从父类继承(public,protected,private)
    3.看父类中的访问级别(public,protected,private)
    
    
    */
    
    class A{
    public:
        int a;
    protected:
        int b;
    private:
        int c;
    };
    
    class B:public A
    {
    public:
        void Test1(){
            a = 10;//父类的公有成员可以在子类内部访问
            b = 20;//父类的保护成员可以在子类内部访问
            //c = 20;  报错: 父类的私有成员在子类内部无法访问
        }
    };
    class Bt :public B
    {
    public:
        void Test12(){
            a = 10;//可以访问B类中的a属性--说明a属性的访问级别至少是public或者protected
            b = 20;//可以访问B类中的b属性--说明a属性的访问级别至少是public或者protected
            //c = 20;  报错:  父类的私有成员在子类内部无法访问
        }
    };
    
    void Protect1(){
        B b1;
        b1.a = 11;//父类的公有成员可以在子类外部访问
        //证明:public继承父类,父类的公有成员会变成子类的公有成员
        //b1.b = 21;  报错  说明:public继承父类,父类的保护成员会变成子类的保护成员
    }
    
    class C :protected A{
        void Test1(){
            a = 10;//父类的公有成员可以在子类内部访问
            b = 20;//父类的保护成员可以在子类内部访问
            //c = 20;  报错: 父类的私有成员在子类内部无法访问
        }
    };
    
    class Ct :public C{
        void Test12(){
            a = 10;//可以访问C类中的a属性--说明a属性的访问级别至少是public或者protected
            b = 20;//可以访问C类中的b属性--说明a属性的访问级别至少是public或者protected
            //c = 20;  报错:  父类的私有成员在子类内部无法访问
        }
    };
    
    void Protect2(){
        C c1;
        //c1.a = 10;  报错 :error C2247 : “A::a”不可访问,因为“C”使用“protected”从“A”继承
        //说明 protected继承父类,父类的公有成员会变为子类的保护成员
        //c1.b = 21;  报错  error C2248 : “A::b” : 无法访问 protected 成员(在“A”类中声明)
        //说明 protected继承父类,父类的保护成员会变为子类的保护成员
    }
    
    class D :private A{
        void Test1(){
            a = 10;//父类的公有成员可以在子类内部访问
            b = 20;//父类的保护成员可以在子类内部访问
            //c = 20;  报错: 父类的私有成员在子类内部无法访问
        }
    };
    
    class Dt :public D{
        void Test12(){
            //a = 10;   报错  error C2247 : “A::a”不可访问,因为“D”使用“private”从“A”继承
            //D中的成员变量无法被其子类访问,说明a成员属性是D的私有成员属性
            //b = 20;   报错  error C2248 : “A::b” : 无法访问 无法访问的 成员(在“A”类中声明)
            //D中的成员变量无法被其子类访问,说明b成员属性是b的私有成员属性
            //说明:private继承父类,父类中的公有成员变量会变成子类的私有成员变量,父类的保护成员变量会变成子类的私有成员变量
        }
    };
    
    void main(){
        system("pause");
    }
    
    /*
    c++的继承方式(public,private,protected)会影响子类对外的访问属性
    public继承:父类成员在子类中保持原有的访问级别
    --即父类的公有成员变成子类的公有成员,父类的保护成员成为子类的保护成员,父类的私有成员被子类继承,但不是子类的私有成员
    private继承:父类成员在子类中变为private成员
    --即父类的公有成员变成子类的私有成员,父类的保护成员成为子类的私有成员,父类的私有成员被子类继承,但不是子类的私有成员
    protected继承:父类中public成员变成protected
    --即父类的公有成员变成子类的保护成员,父类的保护成员成为子类的保护成员,父类的私有成员被子类继承,但不是子类的私有成员
    
    总结:不同的继承方式可能改变继承成员的访问属性
    */
  • 相关阅读:
    AspNet上传文件的几个控件(downmoon收集)
    简单的iframe无刷新上传带生产缩略图和水印
    js 操作frameset frame 对象
    C#里的三种定时器类型
    Asp.net上传图片同时生成缩略图和水印图后台代码
    .NET调用新浪微博开放平台接口的代码示例
    用 javascript 获取鼠标(光标)的坐标位置 兼容IE/Firefox等浏览器
    IIS Web服务扩展中没有Asp.net 2.0
    asp.net实现form验证登陆
    Asp.net实现在线截图(大图截取为小图)
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5628196.html
Copyright © 2011-2022 走看看