posts - 297,  comments - 15,  trackbacks - 0

C++-----虚拟函数的若干说明

1 虚拟的输入输出

1.       第一次引入虚拟函数的基类,必须在类声明中指定virtual关键字。如果定义被放在类的外面则不用再次指定关键字virtual。

2.       引入虚拟函数的类必须定义它,或者把它声明为纯虚拟函数。

3.       为了使虚拟函数的派生类实例能够改写其基类的活动实例,它的原型必须与基类完全匹配。包括参数、返回值、const性等等。

a)       但派生类实例的返回值,可以是基类实例返回类型的公有派生类类型。

2 纯虚拟函数

C++语言为提供了一种语法结,构通过它可以指明一个虚拟函数,只是提供了一个可被子类型改写的接口,但是它本身并不能通过虚拟机制被调用,这就是纯虚拟函数。纯虚拟函数的声明如下所示:

virtual 返回值 FunctionNmae(参数) = 0;

包含或继承一个或多个纯虚拟函数的类被编译器识别为抽象基类,试图创建一个抽象基类的独立类对象会导致编译时刻错误。

抽象基类只能作为子对象出现在后续的派生类中,不能声明抽象基类的对象,但是可以声明抽象类的指针。

3 虚拟函数的静态调用

当用类域操作符调用虚拟函数时,我们改变了虚拟机制,使得虚拟函数在编译时刻被静态解析。改变虚拟机制常常是为了效率,在一个派生类虚拟函数中,有时需要调用基类的实例来完成”已经在基类和派生类实例之间被抽取出来“的操作。

纯虚拟函数可以通过虚拟机制被调用,也可以被静态调用。

4 虚拟函数和缺省实参

    如果一个虚函数在基类提供了一个缺省的参数值,而在派生类中提供了另外一个缺省的参数值,这时候的调用会出现问题,如果用的是基类的指针或者引用调用,则使用的是基类的缺省参数,否则才是派生类的缺省参数。这是因为缺省实参不是在运行时刻决定的,而是在编译时刻根据被调用函数的对象的类型决定的。

    遇到这样的问题可以通过把缺省实参作为用户是够提供实参的标志,而在内部用局部变量作为真正的参数。

posted on 2009-03-27 10:37 chatler 阅读(203) 评论(0)  编辑 收藏 引用 所属分类: C++_BASIS

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(10)

随笔分类(307)

随笔档案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感觉这个博客还是不错,虽然做的东西和我不大相关,觉得看看还是有好处的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新评论

阅读排行榜

评论排行榜