以下内容整理自《程序员面试宝典》,重点讨论一下C++中三种继承方式的区别。
1, 公有继承(public)
基类成员对其对象的可见性与一般类及其对象的可见性相同,public成员可见,protected和private成员不可见。
基类成员对派生类的可见性对派生类来说,基类的public和protected成员可见:基类的public成员和protected成员作为派生类的成员时,它们都保持原有状态;基类的private成员依旧是private,派生类不可访问基类中的private成员。
基类成员对派生类对象的可见性 对派生类对象来说,基类的public成员是可见的,其他成员是不可见的。
所以,在公有继承时,派生类的对象可以访问基类中的public成员,派生类的成员方法可以访问基类中的public成员和protected成员。
2, 私有继承(private)
基类成员对其对象的可见性与一般类及其对象的可见性相同,public成员可见,其他成员不可见。
基类成员对派生类的可见性对派生类来说,基类的public成员和protected成员是可见的:基类的public成员和protected成员都作为派生类的private成员,并且不能被这个派生类的子类所访问;基类的私有成员是不可见的:派生类不可访问基类中的private成员。
基类成员对派生类对象的可见性对派生类对象来说,基类的所有成员都是不可见的。
所以在私有继承时,基类的成员只能由直接派生类访问,无法再往下继承。
3.保护继承(protected)
保护继承与私有继承相似,基类成员对其对象的可见性与一般类及其对象的可见性相同,public成员可见,其他成员不可见。
基类成员对派生类的可见性,对派生类来说,基类的public和protected成员是可见的:基类的public成员和protected成员都作为派生类的protected成员,并且不能被这个派生类的子类所访问;基类的private成员是不可见的:派生类不可访问基类中的private成员。
基类成员对派生类对象的可见性对派生类对象来说,基类的所有成员都是不可见的。
所以,在保护继承时,基类的成员也只能由直接派生类访问,而无法再向下继承。
C++支持多重继承。多重继承是一个类从多个基类派生而来的能力。派生类实际上获取了所有基类的特性。当一个类 是两个或多个基类的派生类时,派生类的构造函数必须激活所有基类的构造函数,并把相应的参数传递给它们 。
PS:
private域通常定义成该类的数据部分,public域称该类的接口部分,protected域通常在这里定义的方法或数据成员通常留给子类重载。
如果一个类以PUBLIC方式继承,那么该类各上述三个域部分不变,public域仍然是public域,private域仍然是private域,protected域仍然是protected域,基类中的私有成员不能被访问;如果以private方式继承则基类的protected和public部分将被视为私有部分,子类可以对基类的protected and public进行访问,但不能访问私有部分;如果以protected继承,那么基类中的public and protected 部分在子类中被视为protected部分,基类中的public and protected部分可以被访问,但私有部分不可以访问。并且三种继承方式,public权限最大,private:最小,protected:居中。
阅读(1433) | 评论(0) | 转发(0) |