C++利用纯虚函数和虚函数实现接口继承和实现继承
2013-06-04 20:26
489 查看
C++的纯虚函数导致声明它的类成为抽象类,即不可以实例化,派生于这个基类的类必须重新声明所有的纯虚函数。通常纯虚函数不在基类中定义,所以派生类实际上是继承了这些纯虚函数形式的接口,它告诉派生类:你必须实现这些纯虚函数的接口,但是具体的实现方式我不干涉,由你决定!例如在绘图基类Shape中有一个纯虚函数为draw,对于正方形、圆形等要求必须有一个对应的draw函数,但具体的draw由具体的派生类决定,基类函数只是告诉你必须声明和定义这个draw函数。
当然,纯虚函数在基类中也是可以定义的,但对它的调用需要由类名进行指定,例如:
相对于纯虚函数,一般的虚函数通常会在基类定义中有具体的实现,它为各个派生类提供缺省时的实现,它的调用方式同普通成员函数的调用方式。
而对于一般的非虚函数,它通常表明各个派生类在这个函数中的行为并没有什么不同,在派生类中不需要也不应该重新实现。
相对于继承接口和继承实现的概念来讲,纯虚函数具体指继承接口,一般的虚函数具体指继承接口和缺省的实现,而一般的非虚函数则是强制派生类继承接口和几乎不需要重新定义得实现。或者可以这样理解,虚函数为派生类提供特化的空间,而非虚函数则代表所有派生类不变的那部分。
以上整理自Effective C++中文版第三版 case 34.
当然,纯虚函数在基类中也是可以定义的,但对它的调用需要由类名进行指定,例如:
Shape* re = new Rectangle; re->Shape::draw();
相对于纯虚函数,一般的虚函数通常会在基类定义中有具体的实现,它为各个派生类提供缺省时的实现,它的调用方式同普通成员函数的调用方式。
而对于一般的非虚函数,它通常表明各个派生类在这个函数中的行为并没有什么不同,在派生类中不需要也不应该重新实现。
相对于继承接口和继承实现的概念来讲,纯虚函数具体指继承接口,一般的虚函数具体指继承接口和缺省的实现,而一般的非虚函数则是强制派生类继承接口和几乎不需要重新定义得实现。或者可以这样理解,虚函数为派生类提供特化的空间,而非虚函数则代表所有派生类不变的那部分。
以上整理自Effective C++中文版第三版 case 34.
相关文章推荐
- C++中关于虚函数接口继承与实现继承的讨论
- 纯虚函数(继承接口),虚函数(继承接口和默认实现),非虚函数(继承接口和强制实现)
- C++中如何实现像Java中接口功能--C++抽象类(纯虚函数,虚函数)
- php利用反射真正实现多继承(非接口模拟)
- C++中的接口继承和实现继承
- C++接口继承与实现继承的区别和选择
- C++中多态怎样由虚函数实现。和纯虚函数介绍
- C++中的接口继承和实现继承
- C++箴言:接口继承和实现继承
- C++箴言:接口继承和实现继承
- effective C++ 条款 34:区分接口继承和实现继承
- C++编程技巧,利用继承实现对他类的友元
- 利用C++实现双链表基本接口示例代码
- C++ 虚函数 虚继承 纯虚函数 之 一二三
- C++中的虚继承,以及利用虚继承实现的sealed类
- C++是如何利用虚函数实现多态性的?
- [收集]c++抽象类、纯虚函数以及巧用纯虚析构函数实现接口类
- C++继承之接口继承和实现继承 .
- 利用jsoncpp接口来实现json字串的序列化与反序列化的C++封装类
- C++学习笔记(十二):类继承、虚函数、纯虚函数、抽象类和嵌套类