公有成员 私有成员 保护成员区别

先用一个继承列子具体讲解一下吧~~

include <iostream>

#include <iomanip>
using namespace std;

#define PI 3.14

class base  //基类base
{
private:

    int v1;           

public:
    int v2;
    base(int a=0,int b=0,int c=0)
    {
        v1=a;
        v2=b;
        v5=c;
    }
    int ares()
    {
        return v1*v2;
    }
protected:
int v5;
};

class push :public base
{
private:
    int v3;
public:
    int v4;
    push(){}
    push(int a,int b)
    {
        v3=a;
        v4=b;
    }

    void fun()
    {
      //  cout <<v1<<endl;
        cout <<v2<<endl;
        cout <<v3<<endl;
        cout <<v4<<endl;
        cout <<v5<<endl;
    }


};


//第一
int main()
 {
    base abj(2,2);


    //cout <<abj.v2<<endl;


    push obj(1,2); //  必须要有 push()  空的构造函数;如果只是声明一个空的push ,再给push赋值的时候
                            //  不要写  obj.push()  这样是错误的 ,应该写一个 input() 函数向里面赋值;
                            //  注意  声明新的push之后要初始化(构造函数也是为此设计的)

    //cout <<obj.v1;
    cout <<obj.v2;
   // cout <<obj.v3;
    cout <<obj.v4;
   // cout <<obj.v5;
    //obj.push(1,2);   //错
    obj.fun();
    //cout <<obj.v2<<endl;
    //cout <<obj.ares();
    //cout <<obj.v3;

 }
/*

 公有和私有继承


 以上面的 base 和 push 为例


 如果 push为公有继承


 那么 在 push 类内部和外部 都可以访问 base 的公有成员,
 而 对于base 的私有成员 ,push类在的内部和外部都不能访问;


 如果 push为私有继承


 那么 在 push 类只能在 内部访问 base的公有成员 ,
 那么更不用说 对于base 的私有成员 ,push类在的内部和外部都不能访问;


 因此 私有继承 和公有继承 的区别 在于 基类(base)的公有成员能否在派生类(push)的外部访问


*/


在保护继承中,基类的公有成员和保护成员都以保护成员的身份出现在派生类中,而基类的私有成员不可直接访问。
也就是所,在保护继承下,基类的保护成员私有成员能在派生类的类中访问,而不能在访问。


比较私有继承和保护继承可以看出,实际上在直接派生时(只有做了一个派生),二者的区别就出现了,假设base派生出了push类,
而push类又派生出了 push++ 类。在私有继承中,base 中的保护成员和公有成员在push中都是私有成员,push++不能访问base中的任何成员
而在保护继承中,base 中的保护成员和公有成员在push中都是保护成员,push++可以访问base 中的保护成员和公有成员,
但是在push和push++类外都不能访问,




给三者排个序 private > protected >public 

以下是基类各类成员在各类派生类的变化情况

#i

猜你喜欢

转载自blog.csdn.net/qq_41199502/article/details/80703943