QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 823|回复: 5

问个C++类类型转换问题

[复制链接]
发表于 2003-10-13 10:23:14 | 显示全部楼层 |阅读模式
class A
{
};
class B : public A
{
};

main()
{
class B b;
((a *) &b)->xxxxx;
((a) b).xxxxx;
}

上面这个((a *) &b)和(a) b对b产生的作用有什么不同?
发表于 2003-10-13 10:50:07 | 显示全部楼层
第二个对b没什么影响吧,应该是产生一个中间数,其类型为a,而b不变。
第一个不太明白。
回复

使用道具 举报

发表于 2003-10-13 11:13:24 | 显示全部楼层
这个转化......对b有影响么?很久没回顾语法的问题了
回复

使用道具 举报

 楼主| 发表于 2003-10-13 17:05:28 | 显示全部楼层
大家看这个:
[code:1]
#include <iostream.h>
class A
{
      public:
      virtual void func(){cout << "A::func" << endl;}
};

class B : public A
{
      public:
      virtual void func(){cout << "B::func" << endl;}
};

main()
{
     B b;
     ((A *)&b)->func();
     ((A)b).func();
}

[/code:1]

结果是:
B::func
A::func
回复

使用道具 举报

发表于 2003-10-13 19:44:48 | 显示全部楼层
见图:
变量的b到a的转化应该是在编译的时候就进行了的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

发表于 2003-10-21 02:32:25 | 显示全部楼层
因为B是A的子类,所以b对象包括A的内容。
第二个表达式只是做了对象切割,然后调用基类的func()
第一个表达式则用了C++的多态性,利用指向基类类型的指针调用继承类的虚函数实现。在这里,基类类型的指针实际指向继承类的对象。
虚函数的调用是在运行时决定的。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-13 04:13 , Processed in 0.042089 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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