BZ易风

导航

 

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;
}

 

posted on 2021-08-23 15:40  BZ易风  阅读(30)  评论(0编辑  收藏  举报