c++的继承方式有三种:公有继承、私有继承、保护继承。
1.公有继承
class B{
private:
int i;
void Seti(int i){this->i=i;}
public:
int j;
protected:
int k;
void setj(int j){this->j=j;}
public:
void seti(int i){this->i=i;}
};
class D:public B{
public:
void fun(){
j=1;
k=9;
i=8;//L1 [Error] 'int B::i' is private
Seti(5);//L2 [Error] 'void B::Seti(int)' is private
setj(2);
}
};
int main(){
D obj;
obj.j=0;// L3
obj.fun();
obj.seti(2);//L4
obj.setj(2);//L5 [Error] 'void B::setj(int)' is protected
}
以上代码展示的是公有继承,基类成员的访问权限在派生类中保持不变。派生类不能直接访问继承自基类的private成员。L1语句试图在D的成员函数fun()中直接访问i,而i在基类中是private,所以访问失败,Seti()函数是同样的道理。派生类可以直接访问继承自基类的public和protected成员,因此fun()函数中调用setj()函数是成功的。在类外,派生类继承自基类的public成员可以通过派生类对象访问,例如L3、L4,但是private成员和protected成员是不允许通过派生类对象或类外函数访问的,如L5。
另外,一个类如果不被其他类继承,那么private和protected成员具有相同的访问属性ÿ