C++中的虚函数(virtualfunction)

C++中的虚函数(virtualfunction),第1张

C++中的虚函数(virtualfunction),第2张

虚函数是C++中用来实现多态性的机制。核心思想是通过基类访问派生类定义的函数。假设我们有下面的类层次结构:


A类
{
public:
虚拟void foo(){ cout foo();//调用的是A::foo()还是B::foo()?
}

因为foo()是一个虚函数,所以根据这段代码不可能确定这里调用的是A::foo()还是B::foo(),但是可以肯定地说,如果A指向A类的一个实例,那么就调用A::foo(),如果A指向B类的一个实例,那么B::foo()

同一个代码可以产生不同效果的这种特性被称为“多态性”。

1.2多态性有什么用?
多态性这么神奇,可又能用来做什么呢?我很难用一两句话来概括这个命题。一般C++教程(或者其他面向对象语言教程)都会用一个画图的例子来说明多态性的使用,这个例子我就不赘述了。如果你不知道这个例子,就找一本应该有介绍的书。我试着从抽象的角度描述一下,再结合后面的绘图例子,也许你会更容易理解。

在面向对象编程中,数据会被抽象(确定基类)和继承(确定派生类),形成类层次结构。当这个类级别的用户使用它们时,如果他们在需要基类的时候仍然为基类编写代码,在需要派生类的时候仍然为派生类编写代码,那么就意味着这个类级别完全暴露给了用户。如果这个类层次结构有任何变化(添加新类),用户需要“知道”(为新类编写代码)。这增加了类级别和它的用户之间的耦合,这在程序中被列为“坏气味”之一。

多态可以让程序员走出这个困境。回头看看1.1中的例子,作为类层次结构A-B的用户,bar()不知道这个类层次结构中有多少个类,也不知道每个类的名称,但是它也可以工作。当A类派生出一个C类时,bar()不需要“知道”(修改)。这完全是由于多态性——编译器为虚函数生成代码,这些代码可以在运行时确定被调用的函数。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++中的虚函数(virtualfunction)

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情