【C++】区分接口继承和实现继承

  利用public继承基类,可以将继承的结果分为两类:函数接口继承函数实现继承

  声明一个纯函数的目的是为了让派生类只继承函数接口.纯虚函数有两个突出的特性:

  它们必须被任何"继承了它们"的具体类重新声明,而且它们在抽象类中通常没有定义.

  声明非纯虚函数的目的,是让派生类继承该函数的接口和缺省实现.

  声明非虚函数的目的,是为了令派生类继承函数的接口及一份强制性实现.

  对class进行设计时,声明成员函数,要谨慎选择,不同类型的声明意味根本意义不相同的事情.

  下面是经验不足的设计者最常犯的错误:

  1.将所有函数声明为非虚函数,相当派生类继承了函数接口和强制性实现,让派生类没有进行特化工作的空间.

   尤其是non-virtual析构函数带来的问题.

   但是当设计一个并不想成为基类的类时,应该将其所有成员函数都声明为non-virtual.

  2.将所有成员函数都声明为virtual.有时候这样做是正确的,但是有时候一些函数不该在派生类中被重新定义,

   这些函数代表继承体系中的不变性.因此,如果类体的不变性凌驾于特异性时,需要将函数声是为non-virtual.

 

  启发:进行面向对象的继承时,类体的设计,至关重要.良好的类体及其继承体系的设计,便于系统的实现,推护和扩展.

  因而在成员函数声明时,要注意类体的作用和目的,从而选择合理的声明方式.

  参考资料:Effective C++

posted @ 2012-07-16 09:23  一点心青  阅读(1948)  评论(0编辑  收藏  举报