- 论坛徽章:
- 0
|
>> 深入浅出中的2与C++ FAQS的说法应该矛盾的吧
并不矛盾,两个说明的情况不同。刚开始的时候其实 converse 已经回答了这个问题:FAQ里面指的是指针和指针之间的转换,而MFC中的1,2指的是指针指向对象的时候的情况。
更具体地说:FAQ说的是将一个派生类指针转换为基类指针的情况,转换之后这两个指针都指向同一个对象——派生类对象;这个转换是默认进行的,不需要强制类型转换。MFC中的 2 说的是将一个派生类指针指向一个基类对象的情况;这需要强制类型转换,因为编译器一般不希望看到这种情况发生。至于这样做的原因,参看上面有关贴子中的说明。
另外,楼主列出了MFC中第二章的三个C++重要性质,想对此作一下说明。正如 renstone921 在上面的分析中告诉我们的那样:这个结论是基于完全放弃了使用虚拟成元函数动态绑定得出的。更准确地说:由于虚拟函数的存在其中的第 1、3 条结论是不正确的;而第 2 条是始终成立的,跟虚拟函数的存在与否关。renstone921 分析得很有道理。但是 renstone921 说侯捷说得不太准确却是有点冤枉侯捷了(也难怪,单从这三条结论来看谁知道是有前提条件的呢)。欲知详情如何,且看下文。
>> 可能是我误解了,我想写书的不至于把基础概念给搞错了
楼主能这么想确实是很明智的。侯捷在书中得出的三个结论是有前提条件的:在叙述这些内容的时候还没有引入虚函数的概念。也就是说,上述结论对于静态绑定是成立的,但不适用于动态绑定(其中的 1、3 条)。这些结论也同时说明了静态绑定的局限性,正是这些局限性,作者才在这些铺垫的基础上在这一节的下面引出了动态绑定即虚函数的概念。 |
|