您的位置:首页 > 编程语言 > C语言/C++

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

2016-06-01 16:28 393 查看
公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。

公有继承(public)

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

私有继承(private)

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

保护继承(protected)

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

publicprotectedprivate
public继承publicprotected不可见
private继承privateprivate不可见
protected继承protectedprotected不可见
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:基类的公共成员在派生类中为私有成员,对对象不可见
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: