游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1723|回复: 3

各位大侠,求教一个虚函数的问题

[复制链接]

10

主题

19

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2005-1-30 16:33:00 | 显示全部楼层 |阅读模式
各类大侠,我写了一个AVGBMP类,用于图形正常和ALPHA及设定关键色进行显示,在此基础上我派生一个AVGDIALOG类来做AVG游戏中的对话框,在基类、派生类中都定义一个叫DRAWWORD的虚函数。为了便于管理,我用了一个CLIST链表,返回值为一个为AVGBMP。并定义了一个AVGBMP指针,当指针指向AVGDIALOG的的实例时,调用的却是AVGBMP中的DRAWWORD,而非AVGDIALOG中的DRAWWORD,我想了一下,由于是CLIST,返回的是AVGBMP,自然无法用AVGDIALOG中的DRAWWORD,就用STATIC_CAST<AVGDIALOG *>来转换,但仍然调用的是AVGBMP中的DRAWWORD。我该如何才能调用AVGDIALOG的DRAWWORD函数呢? [em4]

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
发表于 2005-1-30 17:14:00 | 显示全部楼层

Re:各位大侠,求教一个虚函数的问题

如你的题目,给DRAWWORD定义的前面加上vitural关键字。转换最好用DYNAMIC_CAST才行。
另:你最好给出一些关键代码(什么是关键代码参考c++primer中各个章节),只要不给出所有的东西就行了。

1

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2005-2-4 01:46:00 | 显示全部楼层

Re: 各位大侠,求教一个虚函数的问题

你的CList链表里面放的是什么类型的元素?如果是AVGBMP的类对象,那么你必然调用的是AVGBMP里面的那个函数。建议你CList里面的元素是用AVGBMP*类型,所有元素是用全局变量或者通过new生成应该就没有你这个问题了。

30

主题

276

帖子

276

积分

中级会员

Rank: 3Rank: 3

积分
276
发表于 2005-2-4 03:07:00 | 显示全部楼层

Re:各位大侠,求教一个虚函数的问题

......
从你描述的问题来看。
发生这个问题的可能性有
1 DRAWWORD函数写的时候没有区分大小写,所以实际上形成了两个函数,所以自然是不管怎么调用都是到AVGBMP的函数里去了。

2 你在基类和派生类里面都正确的写出DRAWWORD这个名字,并且声明为虚,但是 你的CLIST的数据并不是AVGDIALOG而是AVGBMP,所以不管怎么调用都是AVGBMP的。(虚函数调用一般编译器都是按偏移来生成的,所以和你的调用指针是什么没有关系,只和指向数据的类型有关。 严格说来 虚函数机制 不依赖于继承,比如 这个问题 ,即使 AVGDIALOG和AVGBMP是两个独立的类,结果可能依然相同。)

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-8 16:35

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表