06-2 继承方式
在上一章中,我们学习了继承的语法:class 子类名称 :继承方式 父类名称
。
继承一共有三种方式
- 公共继承(
public
) - 保护继承(
protected
) - 私有继承(
private
)
继承的三种继承方式就是类中成员的三种权限。
我们假设有一个父类A
:
class A
{
public:
int m_A;
protected:
int m_B;
private:
int m_C;
};
我们以三种继承方式单独介绍:
-
公共继承(
public
)我们创建一个子类
B
,使用公共继承(public
)的方式继承父类B
。即使用这样的方式创建:
class B :public A {};
那么实际创建出来的
B
是这样的:class B :public A { public: int m_A; protected: int m_B; }
-
保护继承(
protected
)我们创建一个子类
B
,使用保护继承(protected
)的方式继承父类B
。即使用这样的方式创建:
class B :protected A {};
那么实际创建出来的
B
是这样的:class B :public A { protected: int m_A; int m_B; }
-
私有继承(
private
)我们创建一个子类
B
,使用私有继承(private
)的方式继承父类B
。即使用这样的方式创建:
class B :private A {};
那么实际创建出来的
B
是这样的:class B :public A { private: int m_A; int m_B; }
-
注意
- 一个子类继承了父类所有成员,但下列情况除外:
- 父类的构造函数、析构函数和拷贝构造函数。
- 父类的重载运算符。
- 父类的友元函数。
- 一个子类继承了父类所有成员,但下列情况除外:
-
总结:
- 无论什么方式继承,都无法访问父类中的私有成员(
private
) - 如果父类中,属性的公开权限大于继承方式的公开权限,则会在继承后,会修改公开权限大于继承方式的成员的权限为当前继承方式的权限。
- 公共继承(
public
):无法访问父类的私有属性(private
)。除私有属性外的属性都可以被继承,且不会修改属性的权限。 - 保护继承(
protected
):无法访问父类的私有属性(private
);父类中公共成员(public
)将会被修改成为保护权限(protected
)。 - 私有继承(
private
)无法访问父类的私有属性(private
);父类中所有成员,都会被修改成为私有权限(private
)。
- 公共继承(
- 无论什么方式继承,都无法访问父类中的私有成员(
:-)