Fantasy Soft
posts - 256, comments - 1319, trackbacks - 41, articles - 8
博客园
::
首页
::
新随笔
::
联系
::
订阅
::
管理
关于虚函数的两个例子
Posted on 2004-09-07 23:57
FantasySoft
阅读(670)
评论(3)
编辑
收藏
所属分类:
All About Soft
、
Pure C++
晚上看了半天的COM,而里面又是满篇的虚函数。尽管自己对于虚函数有一定的了解,但是远离C++也有一些时日,看来补补课是很有必要的了。
打开自己收藏夹,目光停留在
周星星
老大经常出没的地方:
vcKBase
。于是,从这个宝库中找到了自己需要的两篇文章:
C++中的虚函数(一)
和
C++实践系列>C++中的虚函数(virtual function)
。
两篇文章都写得不错,尤其是第二篇,写得很有分量,让人收益非浅。而第一篇通过列举的方式将虚函数的特点一一道来也很不错,美中不足的就是作为范例的代码有些瑕疵了。现列举如下:
1、文章中的第五点通过以下代码以说明多态性:
class
A
{
public
:
virtual
void
f()
{ cout
<<
"
A::f
"
<<
endl; }
}
;
class
B :
public
A
{
public
:
virtual
void
f()
{ cout
<<
"
B::f
"
<<
endl;}
}
;
class
C :
public
A
{
public
:
virtual
void
f()
{ cout
<<
"
C::f
"
<<
endl;}
}
;
class
Drive :
public
C
{
public
:
virtual
void
f()
{ cout
<<
"
D::f
"
<<
endl;}
}
;
int
main(
int
argc,
char
*
argv[])
{
A a;
B b;
C c;
Drive d;
a.f();
b.f();
c.f();
d.f();
return
0
;
}
事实上,这样的代码是不能说明问题的。因为虚函数需要通过指针或者引用才能实现多态的效果。在第一篇文章中,作者就是通过跟以上类似的代码来说明,
使用了虚函数并不等于实现了多态
。
2、文章中第七点通过以下代码来说明通过虚函数可以实现基类调用继承类方法:
class
A
{
public
:
virtual
void
fun()
{
cout
<<
"
A::fun
"
<<
endl;
}
void
show()
{
fun();
}
}
;
class
B :
public
A
{
public
:
virtual
void
fun()
{
cout
<<
"
B::fun
"
<<
endl;
}
}
;
int
main()
{
A a;
a.show();
return
0
;
}
作者仍然犯了跟上面相同的错误,只有将main()函数中的代码改为下面的形式才能达到预期的结果。
int
main()
{
A
*
a
=
new
B;
a
->
show();
return
0
;
}
Feedback
#1楼
回复
引用
2004-09-08 20:03 by
mike [未注册用户]
"因为虚函数需要通过指针或者引用才能实现多态的效果。"
Are you sure, buddy?
#2楼
回复
引用
查看
2004-09-08 21:26 by
Fantasysoft
To mike:I'm sure, buddy!
因为多态性的含义是:This ability to manipulate more than one derived type with a base class pointer or reference is called polymorphism。
#3楼
回复
引用
2005-12-10 22:32 by
暮鼓晨钟 [未注册用户]
It might cause memory leak if the base class was defined without virtual destruct function, just like the sample in the last code fragment.
社区
新闻
新用户注册
刷新评论列表
标题
姓名
主页
Email
(只有博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2004-10-14 17:29 编辑过
另存
打印
所属分类的其他文章:
·
草根化进程
·
若干域名赠送并结识各路英雄
·
压箱底的几个域名出售
·
重新定义旅游网站,米胖新版发布
·
有关核心竞争力
·
DreamHost优惠码——PERHAPS
·
若干域名转让
·
不谈模式,只谈实现
·
一切变得越来越有趣了
·
《WebWork in Action》中文版终于如期面市了
最新IT新闻:
·
金山:360的免费杀毒只能是短期行为
·
江民科技回应杀毒软件免费说 没病不能乱吃药
·
WCG2008中国区总决赛打响
·
新型的编程语言:eC
·
免费的BitDefender能复制卡巴斯基的成功吗?
博客园新闻频道
博客园首页
社区
Powered by:
博客园
Copyright © FantasySoft
日历
<
2004年9月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
公告
阅读我的译作《WebWork in Action》中文版:
CSDN读书频道
电子工业出版社
China-pub
与我互动
给我发短消息
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(52)
给我留言
查看私人留言
我参与的团队
Design & Pattern团队(0/813)
广州.NET俱乐部(0/1693)
小蟒蛇IronPython (0/67)
MVP团队(0/498)
随笔分类
All About Fantasy(83)
All About Soft(173)
Bright Wiki(3)
Daily Portal(3)
Elegant Python(12)
Excellent WebWork(13)
Exciting Linux(2)
Lovely DotNet(12)
Miscellaneous(21)
Non Tech.(4)
Only Windows (12)
Practical Java(8)
Pure C++(9)
Sharp IronPython(29)
Thought Ware(50)
随笔档案
2008年7月 (1)
2008年6月 (1)
2008年4月 (1)
2008年3月 (1)
2008年1月 (1)
2007年12月 (1)
2007年11月 (1)
2007年10月 (1)
2007年7月 (1)
2007年6月 (3)
2007年5月 (1)
2007年4月 (5)
2007年3月 (3)
2007年2月 (2)
2007年1月 (2)
2006年12月 (2)
2006年11月 (3)
2006年10月 (2)
2006年9月 (6)
2006年8月 (5)
2006年7月 (10)
2006年6月 (6)
2006年5月 (7)
2006年4月 (2)
2006年3月 (3)
2006年2月 (3)
2006年1月 (5)
2005年12月 (5)
2005年11月 (6)
2005年10月 (5)
2005年9月 (11)
2005年8月 (15)
2005年7月 (14)
2005年6月 (6)
2005年5月 (2)
2005年4月 (4)
2005年3月 (2)
2005年2月 (13)
2005年1月 (4)
2004年12月 (4)
2004年11月 (1)
2004年10月 (9)
2004年9月 (29)
2004年8月 (32)
2004年7月 (6)
2004年6月 (7)
2004年5月 (2)
文章分类
Fantasy(2)
Soft(6)
文章档案
2005年11月 (1)
2005年7月 (1)
2004年9月 (4)
2004年8月 (2)
相册
Google In Athens 2004
Google In Winter-Holiday 2005
Trip in Seattle
Experts' Links
Allen Lee's Magic
ASP.NET入门随想 - 老燕
femto的Blog
Flier's Sky
HaoHappy' Blog
HD 的 Weblog
Liki's Blog
Raimundo's Blog
Sumtec's Blog
Teddy's Knowledge Base
Terrylee的技术专栏
this.Think()
爱上写程序
编程夜未眠
透明思考
周星星 之 Blog
装配中的脑袋
琢思磋文轩
My Friends
Underneath the Banyantree
潺潺琴柔,啸啸剑狂
记忆碎片
小鱼曼曼-eely
Wonderful Links
0.英雄帝国ONLINE
1.Fantasy Soft - 另外的一个窝
A.中华维客
B.聚好吃 美食百科
C.eemap.org
D.天下维客
E.网络天书
F.维库
搜索
最新评论
1. re: 你今天Python了吗?(上)
Java提高了生产效率?
第一次听到这么说
--安眠花
2. re: 关于创业
支持楼主
--逖靖寒
3. re: 从银行ATM机取款失败说起
我是2008年7月15日厦门工商银行24小时自助银行取款的,等了很久没反映,一直显示系统正在通信中,只好按下取消键,过了一会儿之后,出现系统通信错误,钱没有出来,在另外一台取款机上查询,发现钱已从账...
--可
4. re: 关于创业
谢谢博主真诚的分享你这五年来的感受,我刚出校园,因此对我而言显得更有意义。
--Eleanor Yan
5. re: 关于创业
@坐看云起 谢谢您! 对于您的评论,我只想重申一点:放下并不是放弃。因为要定一个理想,真的太简单。想想我们儿时的理想是什么,估计做个科学家是最热门的答案了。可是到了长大之后呢? 我想,很多东西都是...
--FantasySoft
阅读排行榜
1. WebWork初体验(11898)
2. 解读Hashtable(10994)
3. 让人头痛的Vector(提问篇)(9012)
4. 有关核心竞争力(8269)
5. .NET和J2EE该相互学习什么(7336)
评论排行榜
1. 关于创业(73)
2. 吹响反击Ruby On Rails的号角(53)
3. 有关核心竞争力(51)
4. 二刻拍案惊奇之——国人为什么那么轻视技术(39)
5. .NET和J2EE该相互学习什么(37)