关于C 对象使用的问题

[复制链接]
查看11 | 回复11 | 2011-6-15 01:26:51 | 显示全部楼层 |阅读模式
看别人代码看到这么一段,不解其意:
classA;
classB;
classC;
A*a;
B*b;
C*c;
不解的是这句:
a-b=dynamic_castB*(c);
a和b分别是两个不同类的对象,为什么能用去-去操作它们?请问大家这是什么用法?
回复

使用道具 举报

千问 | 2011-6-15 01:26:51 | 显示全部楼层
是的,我看到了classA的定义中有B*b;但b仍然是以类B的对象定义的呀,为什么能与a有-的操作呢?
回复

使用道具 举报

千问 | 2011-6-15 01:26:51 | 显示全部楼层
classA既然有B*b的定义,a就通过指针就可以访问它呀(纯粹从语法的角度),这个有什么不对吗?
回复

使用道具 举报

千问 | 2011-6-15 01:26:51 | 显示全部楼层
不是不对,是我不懂这种用法,你能详细点给我说说吗?非常感谢!
回复

使用道具 举报

千问 | 2011-6-15 01:26:51 | 显示全部楼层
这个语法应该是很基本的.比如
classB{
};
classA{
public:
B*b;
};
voidtest()
{
A*a=newA;
a-b;

Aaa;
aa.b;
}
是我没有理解你的意思吗?
回复

使用道具 举报

千问 | 2011-6-15 01:26:51 | 显示全部楼层
那你能解释一下我题目中这句吗:a-b=dynamic_castB*(c);
回复

使用道具 举报

千问 | 2011-6-15 01:26:51 | 显示全部楼层
dynamic_cast是类型的动态转换,你可以查找一些相关的资料.
a-b=dynamic_castB*(c);这句话的意思是把c动态的转换为B的类型(一般是子类型),并且赋给a-b.classB和classC之间应该存在继承关系,一般来说,C应该是B的超类.这个你可以再看看源代码.
回复

使用道具 举报

千问 | 2011-6-15 01:26:51 | 显示全部楼层
是的,我看到了classA的定义中有B*b;但b仍然是以类B的对象定义的呀,为什么能与a有-的操作呢?
回复

使用道具 举报

千问 | 2011-6-15 01:26:51 | 显示全部楼层
既然B*b在类A中定义了,那么b就是A的一个成员变量,只不过他的类型是B*罢了,没什么奇怪的。这样用完全符合要求。
回复

使用道具 举报

千问 | 2011-6-15 01:26:51 | 显示全部楼层
那么请问这句a-b=dynamic_castB*(c);是赋值给A的成员变量也即是类B的对象b,使b的值等于被强制转换成B*类型的类C的对象c了吗?
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行