在C++中,子类继承父类有三种继承方式,分别是:public, protected和private。子类继承的方式不同,那么子类对象访问父类中的参数访问权限也不同。
public 方式继承:基类的private成员派生类不可见,基类中的protected和public成员在派生类中可以直接使用,并且变成了派生类中相应 的protected成员和public成员,但是只有public成员可以在派生类外使用。
protected 方式继承:基类的private成员派生类不可见,基类的protected成员和public成员变成派生类的protected成员,这时在派生类 外不能使用基类的所有成员,包括public成员。
private 方式继承:基类的private成员仍然为私有的,派生类不可见,基类中的protected成员和public成员成为了派生类中的private成 员,在派生类外不能使用基类中的任何成员。
下面我们通过例子来解释上面的说法:
class A { public: int m_public; protected: int m_protected; private: int m_private; }; class B :public A { void SetPublic(int nPublic) { m_public = nPublic; //在派生类B中可以使用基类A中的public类型 } void SetProtected(int nProtected) { m_protected = nProtected; //在派生类B中可以使用基类A中的protected类型 } void SetPrivate(int nPrivate) { m_private = nPrivate; //错误,因为基类的private成员不能用 } }; B b; //创建B类的对象c b.m_public = 100; //正确 b.m_protected = 100; //错误,public继承中基类的protected在派生类中是protected b.m_private = 100; //错误,在派生类中都不可以直接使用,在类外就更不能了 class C :protected A { void SetPublic(int nPublic) { m_public = nPublic; //在派生类C中可以使用基类A中的public类型 } void SetProtected(int nProtected) { m_protected = nProtected; //在派生类C中可以使用基类A中的protected类型 } void SetPrivate(int nPrivate) { m_private = nPrivate; //错误,因为基类的private成员不能用 } }; C c; //创建C类的对象c c.m_public = 100; //错误,protected继承C类里变成了protected成员 c.m_protected = 100; //错误,protected继承C类里还是protected成员 c.m_private = 100; //错误,在派生类中都不可以直接使用,在类外就更不能了 class D :private A { void SetPublic(int nPublic) { m_public = nPublic; //在派生类D中可以使用基类A中的public类型 } void SetProtected(int nProtected) { m_protected = nProtected; //在派生类D中可以使用基类A中的protected类型 } void SetPrivate(int nPrivate) { m_private = nPrivate; //错误,因为基类的private成员不能用 } }; D d; //创建D类的对象d d.m_public = 100; //错误,private继承D类里变成了private成员 d.m_protected = 100; //错误,private继承D类里变成了private成员 d.m_private = 100; //错误,在派生类中都不可以直接使用,在类外就更不能了