想问一下侯捷深入浅出mfc的一个虚函数问题

来源:百度知道 编辑:UC知道 时间:2024/09/28 09:27:19
这是电子书的截图,我想问一下我画线的地方什么意思啊
(电子书P84,纸书P69页),谢谢了
三楼那位说的什么乱七八糟的啊,受过什么打击的是吗

这是对大灾难的一个回答.只能说作者文采很好

(CDocument)mydoc导致CDocument的copy constructor的调用,创建一个临时的CDocument对象,这里完全就变成了CDocument类对象,和子类无任何关系,也不涉及多态。
侯sir这里“传值而非传址操作”指的是(CDocument)mydoc这条语句,它导致一个基类临时对象的创建(由基类拷贝构造函数创建),拷贝构造函数将mydoc中CDocument的内容复制了一份到这个新创建的临时对象中。
你把(CDocument)mydoc看成是一个CDocument对象就好理解了,既然是CDocument对象,通过"."形式调用虚函数Serialize(在func中调用也一样)时自然就是CDocument中定义的版本了(即使改成:(&((CDocument)mydoc)) -> func()的形式也不会引发多态行为)。

书上在接下来一段就写了"结论是".
其实只要记住结论.

好样的,是条汉子!!!!!
无言是最好的表白,自个学吧

就是说因为复制了CDocument类的vtable所以使用mydoc的虚函数指针的时候会调用CDocument的虚函数而不是mydoc的指针从而不会发生大灾难
我是这么理解的 不知道对不对

3楼的确实雷人啊。。

关注