((类名)对象名)->函数名 C++中怎么理解 例如:mfc中((CDocument)mydoc).fuc()或者((CDocument*)(&mydo

例如:mfc中((CDocument)mydoc).fuc()或者((CDocument*)(&mydoc)->fuc()分别怎么理解。。急求在线等。。。... 例如:mfc中((CDocument)mydoc).fuc()或者((CDocument*)(&mydoc)->fuc()分别怎么理解。。急求在线等。。。 展开
 我来答
当年梦里人
2012-04-16
知道答主
回答量:3
采纳率:0%
帮助的人:4831
展开全部
天壤之别!尤其是涉及到C++中的多态特性时。(你提到了MFC,多态性肯定是逃不掉了,呵呵。)
侯sir的经典《深入浅出MFC》的第二章中提到过一点,但只是一带而过,没有很详细地给出解释。

(CDocument)mydoc这条语句的意思是,将mydoc强制转换为一个CDocument对象,mydoc你没说出它是哪个类的对象。按MFC惯例,应该是CDocument的一个派生类的对象。
语句简简单单,但涉及的动作却很多。它会导致CDocument的拷贝构造函数的执行,拷贝构造函数会创建一个全新的临时的CDocument类型的对象,暂且叫它tempCDoc吧;然后将mydoc的CDocument部分复制给tempCDoc。所以这条语句等于是创建了一个全新的CDocument对象,不过是临时的。到此,就和mydoc全无关系了,它调用成员函数时,总是CDocument的成员函数。而且,上面是通过"."来调用fuc()的,根本谈不上多态。
说简单点,你把((CDocument)mydoc)直接看成一个CDocument的对象就可以了,不要管mydoc是什么东西。

第二个语句就和第一条截然不同。在C++中是可以用派生类对象或其地址去给基类的引用或指针赋值的,所以用&对mydoc取地址后,可以直接转换为CDocument *,即指向CDocument对象的指针。当然,这个指针实际指向的东西其实是mydoc,它是个派生类的对象(这里就没有什么拷贝构造函数调用、临时对象这些乱七八糟的)。如果在CDocument中,fuc是个虚函数,派生类又对它override了,那((CDocument*)(&mydoc)->fuc()其实是调用了派生类的版本;又或者fuc不是虚函数,但它的函数体里调用了CDocument及其派生类都定义了的虚函数的话,结果还是调用派生类的版本。这里就涉及到了多态。

MFC里面大量用到了C++里面的多态机制,甚至可以说,没有多态就没法使用MFC,因为你去继承了MFC定义的类后,去哪里添加自己的处理动作呢?

提个小建议,我觉得要学MFC,首先要对C++的继承、多态这些机制了解一下,要不然,学习过程会痛苦不堪。有时间的话,推荐你研究下侯俊杰的《深入浅出MFC第二版》 :-)
gmajdgvt
2011-03-24 · TA获得超过456个赞
知道小有建树答主
回答量:159
采纳率:0%
帮助的人:112万
展开全部
强制类型转换,都是将mydoc强制成CDocument,差别在于调用成员函数的方式是不同,第二个指针调用
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3daa66d
2011-03-27
知道答主
回答量:23
采纳率:0%
帮助的人:0
展开全部
CDocument时文档类的积累,mydoc时他的派生类,(CDocument)mydoc把派生类强制转换成积基类,然后条用基类的方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-03-24
展开全部
是不是CDocument类是mydoc的基类啊?这样的话((CDocument)mydoc).fuc()或者((CDocument*)(&mydoc)->fuc()调用的是 基类CDocument中的fuc()而不是mydoc的类中的fuc()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式