C++继承:公有,私有,保护

来源:互联网 发布:监狱建筑师 for mac 编辑:程序博客网 时间:2024/04/28 11:00

公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。

公有继承(public)

公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类所访问。

私有继承(private)

私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。

保护继承(protected)

保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。

public protected private public继承 public protected 不可见 private继承 private private 不可见 protected继承 protected protected 不可见
class A    {    public:        int publicA;    protected:        int protectedA;    private:        int privateA;    };    class B:public A //基类A的派生类B(public继承)    {    public:        void funct()        {            int b;            b=publicA;    //ok:基类的public成员在派生类中为public成员            b=protectedA; //ok:基类的protected成员在派生类中为protected成员            //b=privateA;   //error:基类的private成员在派生类中是不可见的        }    };    class C:private A    {    public:        void funct()        {            int c;            c=publicA;    //ok:基类的public成员在派生类中为private成员            c=protectedA; //ok:基类的protected成员在派生类中为private成员            //c=privateA;   //error:基类的private成员在派生类中是不可见的        }    };    class D:public C    {    public:        void funct()        {            int d;            //d=publicA;    //error:类C由类A private继承得到,所以publicA已经成为C的private成员            //d=protectedA; //error:类C由类A private继承得到,所以protectedA已经成为C的private成员            //d=privateA;   //error:基类的private成员在派生类中是不可见的        }    };
int a;    B objB;    a = objB.publicA;    //a = objB.protectedA;//error:基类的保护成员在派生类中为保护成员,对对象不可见    //a = objB.privateA;//error:基类中私有成员在派生类中是不可见的,对对象不可见    C objC;    //a=objC.publicA;   //error:基类中私有成员在派生类中是不可见的,对对象不可见    //a=objC.protectedA; //error:基类的保护成员在派生类中为私有成员,对对象不可见    //a=objC.privateA;    //error:基类的公共成员在派生类中为私有成员,对对象不可见
0 0
原创粉丝点击