• 继承方式


    public:公有继承

    protected:保护继承

    private:私有继承

    关系:

    不管公有继承 保护 还是私有 基类中的私有属性 ,都不可以继承下去

    公有继承 

     父类中的protected 在子类中是 protected

     父类中的public 在子类中是 public

    保护继承

     父类中的protected 在子类中是 protected

     父类中的public 在子类中是 protected

    私有继承

     父类中的protected 在子类中是 private

     父类中的public 在子类中是 private

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    
    //基类
    class A {
    public:
        int mA;
    protected:
        int mB;
    private:
        int mC;
    };
    
    //1. 公有(public)继承
    class B : public A {
    public:
        void PrintB() {
            cout << mA << endl; //可访问基类public属性
            cout << mB << endl; //可访问基类protected属性
            //cout << mC << endl; //不可访问基类private属性
        }
    };
    class SubB : public B {
        void PrintSubB() {
            cout << mA << endl; //可访问基类public属性
            cout << mB << endl; //可访问基类protected属性
            //cout << mC << endl; //不可访问基类private属性
        }
    };
    void test01() {
    
        B b;
        cout << b.mA << endl; //可访问基类public属性
        //cout << b.mB << endl; //不可访问基类protected属性
        //cout << b.mC << endl; //不可访问基类private属性
    }
    
    //2. 私有(private)继承
    class C : private A {
    public:
        void PrintC() {
            cout << mA << endl; //可访问基类public属性
            cout << mB << endl; //可访问基类protected属性
            //cout << mC << endl; //不可访问基类private属性
        }
    };
    class SubC : public C {
        void PrintSubC() {
            //cout << mA << endl; //不可访问基类public属性
            //cout << mB << endl; //不可访问基类protected属性
            //cout << mC << endl; //不可访问基类private属性
        }
    };
    void test02() {
        C c;
        //cout << c.mA << endl; //不可访问基类public属性
        //cout << c.mB << endl; //不可访问基类protected属性
        //cout << c.mC << endl; //不可访问基类private属性
    }
    //3. 保护(protected)继承
    class D : protected A {
    public:
        void PrintD() {
            cout << mA << endl; //可访问基类public属性
            cout << mB << endl; //可访问基类protected属性
            //cout << mC << endl; //不可访问基类private属性
        }
    };
    class SubD : public D {
        void PrintD() {
            cout << mA << endl; //可访问基类public属性
            cout << mB << endl; //可访问基类protected属性
            //cout << mC << endl; //不可访问基类private属性
        }
    };
    void test03() {
        D d;
        //cout << d.mA << endl; //不可访问基类public属性
        //cout << d.mB << endl; //不可访问基类protected属性
        //cout << d.mC << endl; //不可访问基类private属性
    }
    
    
    int main()
    {
        system("Pause");
        return 0;
    }
  • 相关阅读:
    推荐三首适合午休时听的歌
    我要用全身心的爱来迎接每一天!
    过年,别忘了给父母买点东西
    外来务工的人们,你们真是不容易啊!
    新年最新的100句超牛的语言(转)
    最近Gmail扩容的很快
    老板其人
    乒乓爱好者请进:看看你是第几级?
    上海轨道交通地图电子版(提供下载)
    windows XP使用秘籍(包括空当接龙秘籍)
  • 原文地址:https://www.cnblogs.com/yifengs/p/15176190.html
Copyright © 2020-2023  润新知