两个类型比较的问题 为什么前一个是equal 后一个却不是equal的。

林初茵 2008-12-14 07:25:49
两个类型比较的问题 为什么前一个是equal 后一个却不是equal的。
#include <iostream>
using namespace std;
class A{
int m_nA;
};
class B{
int m_nB;
};
class C : public A, public B{
int m_nC;
};
int main() {

C* pC = new C;
B* pB = dynamic_cast<B*>(pC);
A* pA = dynamic_cast<A*>(pC);
//cout << pC << endl;
//cout << pB << endl;
if(pC==pB)
{cout << "equal" << endl;}

//cout << pC << endl;
//cout << pB << endl;
//cout << int(pC) << endl;
//cout << int(pB) << endl;
if(int(pC)==int(pB))

{cout << "equal" << endl;}
return 0;
}
...全文
155 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
SearchLife 2008-12-14
  • 打赏
  • 举报
回复
mark
就呆在云上 2008-12-14
  • 打赏
  • 举报
回复
哦上面的多继承看错了,我以为没有继承A
呵呵
可以的拉
具体的地址可以看上面的分析
林初茵 2008-12-14
  • 打赏
  • 举报
回复
请问楼上高手
pC==(C *)pB 比较的是指针?

为什么不是比较地址? 如果比较地址怎么办?
lann64 2008-12-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ztz0223 的回复:]
这个在c++编程思想里面第一卷里面说道了
呵呵
就是基类和派生类的地址和布局的问题
单纯的pC和pB指向的是一个对象地址因此是相等的
但是第二个
加上了int的强加转型,pc指向的pb对象里面的基类B局部地址,故不想同
但是
你程序能运行?
怀疑
danamic_cast的使用能这么用?
[/Quote]
dynamic_cast本身就是这么用的。向上转换呀。
就呆在云上 2008-12-14
  • 打赏
  • 举报
回复
这个在c++编程思想里面第一卷里面说道了
呵呵
就是基类和派生类的地址和布局的问题
单纯的pC和pB指向的是一个对象地址因此是相等的
但是第二个
加上了int的强加转型,pc指向的pb对象里面的基类B局部地址,故不想同
但是
你程序能运行?
怀疑
danamic_cast的使用能这么用?
zenny_chen 2008-12-14
  • 打赏
  • 举报
回复
正如二楼所说的,两个指针比较时,如果类型不同,那么右操作数将会进行类型的隐式转换。
lann64 2008-12-14
  • 打赏
  • 举报
回复
pB实际上指向的地址是对象C中的子类B部分,从地址上跟pC不一样,所以直接比较地址数值的时候是不相等的。
当进行pC==pB比较时,实际上是隐式转换比较pC指向的对象的B部分和pB指向的部分,这个是同一部分,也就显示相等了。
zenny_chen 2008-12-14
  • 打赏
  • 举报
回复
如果说是地址值的话,两者的确不同。而如果是判断两个指针是否相等,那么将会做它们是否指向同一个对象这样的判断。
fox000002 2008-12-14
  • 打赏
  • 举报
回复
if(pC==pB)

这里两端的数据类型不同,比较需要进行隐式类型转换

第二处两端转换为 int,指针 pC 和 pB 的值不同,转换后的 int 值不同


pC==(C *)pB // equal

int(pC)==int((C *)pB) // equal
herman~~ 2008-12-14
  • 打赏
  • 举报
回复
mark

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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