继承与接口
整个c++程序设计全面围绕面向对象的方式进行。类的继承特性是c++的一个非常重要的机制。继承特性可以使一个新类获得其父类的操作和数据结构,程序员只需在新类中增加原有类中没有的成分。
一旦成功定义派生类,那么派生类就可以操作基类的所有数据成员,包括受保护型的,甚至我们可以在构造派生类对象的时候初始化它们,但我们不推荐这么做,因为类与类之间的操作是通过接口进行沟通的,为了不破坏类的这种封装特性,即使是父类与子类的操作也应遵循这个思想。这么做的好处
一、继承
派生类的3种继承方式小结如下:
公有继承(public)、私有继承(private)、保护继承(protected)是常用的3中继承方式。
1、公有继承方式
基类成员对其对象的可见性与一般类及其对象的可见性相同,公有成员可见,其他成员不可见。这里保护成员与私有成员相同。
基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成员可见,基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态;基类的私有成员不可见,基类的私有成员仍然是私有的,派生类不可访问基类中的私有成员。
基类成员对派生类对象的可见性对派生类对象来说,基类的公有成员时可见的,其他成员是不可见的。
所以,在公有继承时,派生类的对象可以访问基类中的公有成员,派生类的成员函数可以访问基类中的公有成员和保护成员。
2、私有继承
基类成员对其对象的可见性与一般类及其对象的可见性相同,公有成员可见,其他成员不可见。
基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成员是可见的,基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这歌派生类的子类访问;基类的私有成员是不可见的,派生类不可访问基类中的私有成员。
基类成员对派生类对象可见性对派生类对象来说,基类的所有成员都是不可见的。
所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。
3、保护继承方式
这种继承方式与私有继承方式的情况相同。两者的区别仅在于对派生类的成员而言,基类成员对其对象的可见性与一般类及其对象的可见性相同,公有成员可见,其他成员不可见。
基类成员对派生类的可见性对派生类来说,基类的公有成员和保护成员是可见的,基类的公有成员和保护成员都作为派生类的保护成员,并且不能被这歌派生类的子类的对象所访问,但可以被派生类的子类所访问;基类的私有成员是不可见的,派生类不可访问基类中的私有成员。
基类成员对派生类对象的可见性对派生类来说,基类的所有成员都是不可见的。
访问规则2、多重继承
1、请评价多重继承的优点和缺陷。
多重继承在语言上并没有什么很重要的问题,但是标准本身只对语义做了规定,而对编译器的细节没有做规定。所以在使用时(即使是继承),最好不要对内存布局等有什么假设。此类的问题还有虚析构函数等。为了避免由此带来的复杂性,通常推荐使用复合。但是,在《C++设计新思维》一书中对多重继承和模板有极为精彩的运用。
(1)多重继承本身并没有问题,如果运用得当可以收到事半功倍的效果。不过大多数系统的类层次往往有一个公共的基类,就像MFC中的Cobject,Java中的Object
网友评论