zoukankan      html  css  js  c++  java
  • 继承方式

    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;
    }
  • 相关阅读:
    使用 richtextbox 输出程序运行信息
    多线程 更新 winform 控件的值,以避免UI线程的卡顿
    多线程 以及 主程序退出时 子线程的销毁
    supersocket 通过配置文件启动服务 总是 初始化失败的 解决办法
    增删改存储过程 框架
    winform DataGridView 通用初始化
    SQLServer存储过程 实例,很多语法可以以后参考
    Winform中 DataGridView控件中的 CheckBox 的值读出来 始终 为 False ,已解决
    winform中 让 程序 自己重启
    字符数组什么时候要加‘’
  • 原文地址:https://www.cnblogs.com/yifengs/p/15176190.html
Copyright © 2011-2022 走看看