您的位置:首页 > 编程语言 > C语言/C++

C++利用纯虚函数和虚函数实现接口继承和实现继承

2013-06-04 20:26 489 查看
C++的纯虚函数导致声明它的类成为抽象类,即不可以实例化,派生于这个基类的类必须重新声明所有的纯虚函数。通常纯虚函数不在基类中定义,所以派生类实际上是继承了这些纯虚函数形式的接口,它告诉派生类:你必须实现这些纯虚函数的接口,但是具体的实现方式我不干涉,由你决定!例如在绘图基类Shape中有一个纯虚函数为draw,对于正方形、圆形等要求必须有一个对应的draw函数,但具体的draw由具体的派生类决定,基类函数只是告诉你必须声明和定义这个draw函数。

当然,纯虚函数在基类中也是可以定义的,但对它的调用需要由类名进行指定,例如:

Shape* re = new Rectangle;
re->Shape::draw();


相对于纯虚函数,一般的虚函数通常会在基类定义中有具体的实现,它为各个派生类提供缺省时的实现,它的调用方式同普通成员函数的调用方式。

而对于一般的非虚函数,它通常表明各个派生类在这个函数中的行为并没有什么不同,在派生类中不需要也不应该重新实现。

相对于继承接口和继承实现的概念来讲,纯虚函数具体指继承接口,一般的虚函数具体指继承接口和缺省的实现,而一般的非虚函数则是强制派生类继承接口和几乎不需要重新定义得实现。或者可以这样理解,虚函数为派生类提供特化的空间,而非虚函数则代表所有派生类不变的那部分。

以上整理自Effective C++中文版第三版 case 34.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: