C++中的虚函数(virtualfunction).docx

上传人:工**** 文档编号:559861919 上传时间:2024-02-19 格式:DOCX 页数:3 大小:12.97KB
返回 下载 相关 举报
C++中的虚函数(virtualfunction).docx_第1页
第1页 / 共3页
C++中的虚函数(virtualfunction).docx_第2页
第2页 / 共3页
C++中的虚函数(virtualfunction).docx_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《C++中的虚函数(virtualfunction).docx》由会员分享,可在线阅读,更多相关《C++中的虚函数(virtualfunction).docx(3页珍藏版)》请在金锄头文库上搜索。

1、 C+中的虚函数(virtualfunction)class Apublic:virtual void foo() cout foo(); / 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的! 这个例子是虚函数的一个典型应用,通过这个例子,或许你就对虚函数有了一些概念。它虚就虚在所谓“推迟联编”或者“动态联编”上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为“虚”函数。 虚函数只能借助于指针或者引用来到达多态的效果,假如是下面这样的代码,则虽然是虚函数,但它不是多态的: cl

2、ass Apublic:virtual void foo(); class B: public A virtual void foo(); void bar() A a;a.foo(); / A:foo()被调用 1.1 多态在了解了虚函数的意思之后,再考虑什么是多态就很简单了。仍旧针对上面的类层次,但是使用的方法变的简单了一些:void bar(A * a)a-foo(); / 被调用的是A:foo() 还是B:foo()? 由于foo()是个虚函数,所以在bar这个函数中,只依据这段代码,无从确定这里被调用的是A:foo()还是B:foo(),但是可以确定的说:假如a指向的是A类的实例,则

3、A:foo()被调用,假如a指向的是B类的实例,则B:foo()被调用。 这种同一代码可以产生不同效果的特点,被称为“多态”。 1.2 多态有什么用? 多态这么奇妙,但是能用来做什么呢?这个命题我难以用一两句话概括,一般的C+教程(或者其它面对对象语言的教程)都用一个画图的例子来展现多态的用途,我就不再重复这个例子了,假如你不知道这个例子,任凭找本书应当都有介绍。我试图从一个抽象的角度描述一下,回头再结合那个画图的例子,或许你就更简单理解。 在面对对象的编程中,首先会针对数据进展抽象(确定基类)和继承(确定派生类),构成类层次。这个类层次的使用者在使用它们的时候,假如仍旧在需要基类的时候写针对基类的代码,在需要派生类的时候写针对派生类的代码,就等于类层次完全暴露在使用者面前。假如这个类层次有任何的转变(增加了新类),都需要使用者“知道”(针对新类写代码)。这样就增加了类层次与其使用者之间的耦合,有人把这种状况列为程序中的“bad smell”之一。 多态可以使程序员脱离这种窘境。再回头看看1.1中的例子,bar()作为A-B这个类层次的使用者,它并不知道这个类层次中有多少个类,每个类都叫什么,但是一样可以很好的工作,当有一个C类从A类派生出来后,bar()也不需要“知道”(修改)。这完全归功于多态-编译器针对虚函数产生了可以在运行时刻确定被调用函数的代码。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 习题/试题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号