一个不解的参数传递问题?

yongClb 2005-07-15 03:42:50

在我的程序中,有一个类xx(无继承类),父类yy和子类zz,在类xx.cpp中的函数调用一个zz中的函数(参数类型说明为父类yy)。测试结果发现,子类zz中的参数值在调用前类型是zz*,并且测试是对的,但是在该函数体内测试时,发现传入的参数值有部分丢失的现象,不知大家碰到过这样的情形没有,可是我实在测试好几遍了,请各位高手指点一下,不尽感谢。
部分代码如下所示。
class xx
 {
void units(xx*, zz *t);
}

// xx.cpp
void xx::units(xx *s1, zz *t)
{
zz *ki; ki=new zz();
... //此处测试的参数值t是对的
ki->compare(t);
...
}

class yy
{
...
}
class zz: public yy
{
int compare(yy *ss);
}
//zz.cpp

int zz::compare(yy *ss)
{
zz *curs=(zz*)ss;
... //其中测试发现所赋值curs不对
}

不解??
 
...全文
84 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yongClb 2005-07-15
  • 打赏
  • 举报
回复

请教各位一个相关的问题:
class ss:public aa
{
public:
...
int init(aa *q); //
//int init(ss *q); //
}

上面的2个函数说明有什么区别吗?如果我使用下面一种参数说明形式可不可以?谢谢.


yongClb 2005-07-15
  • 打赏
  • 举报
回复

Vor分析的对,在调用之前进行了向上转换,然后向下转换,能不能不改变参数类型使程序正常运行呀?希望大家再提宝贵意见!
Vor 2005-07-15
  • 打赏
  • 举报
回复
我猜想可能是这样:
void xx::units(xx *s1, zz *t)//t是zz子类指针
int zz::compare(yy *ss) //ss是yy父类指针
当你在units中调用compare(t)会丢失一部分内容,就是属于子类但父类没有的那部分,之后在compare()中你又强制进行了向下赋值(zz *curs=(zz*)ss; ),至此时cur指向的对象已经发生了两次变化
yongClb 2005-07-15
  • 打赏
  • 举报
回复

要说明一下的是,传入的这个参数类型已经是zz*,只不过声明的这个函数参数类型是yy*,不知道有没有什么不同?我试着加了dynamic_cast<zz*>后,有一个警告之类的:
warning C4541: 'dynamic_cast' used on polymorphic type 'class yy' with /GR-; unpredictable behavior may result
这是什么意思??
sungengyu 2005-07-15
  • 打赏
  • 举报
回复
使用 dynamic_cast 操作符

具体细节去看看 C++ 的书吧。
qrlvls 2005-07-15
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccelng/htm/express_72.asp
qrlvls 2005-07-15
  • 打赏
  • 举报
回复
up
reinterpret_cast
对此这种类型的转化需要注意内存对齐的问题
sungengyu 2005-07-15
  • 打赏
  • 举报
回复
zz *curs=(zz*)ss; // 这里不能强制转化。

细节看看书吧,大概是 zz* curs = ***_cast<zz*> ss ;

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧