很简单的问题.希望有明白的点明下

幸福的朵朵 2008-06-26 03:16:54
virtual CRuntimeClass* GetRuntimeClass() const
{ return (CRuntimeClass*)&classCPerson; }
我想问的上这里的我知道是返回classCPerson地址 但是第2句怎么是引用对吗.我又种理解
1 是获得classCPerson他的地址 然后前面的(CRuntimeClass*)是类型转化 ,但是好象这种 不太对
2 是引用类型 但是这里返回引用的是什么?为什么用引用直接 {return &classCPerson}不就可以了吗
...全文
90 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
幸福的朵朵 2008-06-27
  • 打赏
  • 举报
回复
大家都没明白 不过我现在已经弄清楚了,我说的
virtual CRuntimeClass* GetRuntimeClass() const
{ return (CRuntimeClass*)&classCPerson; }

static const CRuntimeClass classCPerson
为什么要强制转换为(CRuntimeClass*)是因为 定义classCPerson的时候 在第2句 里面返回的是const CRuntimeClass 昨天我忽视了 而 我们函数返回的是CRuntimeClass*类型的指针 所以去掉了 转换就造成了强制转换的错误!!!
不过谢谢上面的几个兄弟,我把分数平分了吧
幸福的朵朵 2008-06-26
  • 打赏
  • 举报
回复
virtual CRuntimeClass* GetRuntimeClass() const
{ return (CRuntimeClass*)&classCPerson; }

static const CRuntimeClass classCPerson
大家都没明白我在问什么 我是问第2行为什么要把classCPerson做类型的转换, classCPerson在最后一句不是声明了是CRuntimeClass的吗
长尾巴的悟空 2008-06-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cnzdgs 的回复:]
在定义变量时,前面加&是引用;在使用变量时,前面加&是取变量的地址。
[/Quote]

这种方法不错.
胡椒爸爸 2008-06-26
  • 打赏
  • 举报
回复
是取地址啦。。。。。
cnzdgs 2008-06-26
  • 打赏
  • 举报
回复
在定义变量时,前面加&是引用;在使用变量时,前面加&是取变量的地址。
lzg0001 2008-06-26
  • 打赏
  • 举报
回复
你说的这些东西我没见过,至于引用根本没涉及到,不过我想可能是一个对象中“基”对象的地址。

class A{ ... };
class B : public A { ... };

B b;

A * pA = (A*)&b;

此时 pA 值与对象 b 的地址不同,编译器在作类型转化的时候会自动加上一个偏移,此偏移是对象内存模型中
基对象与子对象地址差值。

不懂你说的东西,纯属个人意见,不对误怪。
幸福的朵朵 2008-06-26
  • 打赏
  • 举报
回复
virtual CRuntimeClass* GetRuntimeClass() const
{ return (CRuntimeClass*)&classCPerson; }

static const CRuntimeClass classCPerson;
就向这个 为什么要转化呢?
幸福的朵朵 2008-06-26
  • 打赏
  • 举报
回复
好象不转换也可以的啊..classCPerson自己就是CRuntimeClass类型的为什么要转呢
ouyh12345 2008-06-26
  • 打赏
  • 举报
回复
CRuntimeClass &classCPerson;
这样的才是引用
幸福的朵朵 2008-06-26
  • 打赏
  • 举报
回复
但是 书上说&A前面有类型符号时候 是引用?
evileagle 2008-06-26
  • 打赏
  • 举报
回复
意思就是取classCPerson的地址,然后转换为CRuntimeClass型指针

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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