奇怪的多态问题?

XqYuan 2008-10-06 06:27:15
#include "stdafx.h"

class A
{
public:
A(){doSth();}
virtual void doSth(){printf("I am A");}
};

class B:public A
{
public:
virtual void doSth(){printf("I am B");}
};


int _tmain(int argc, _TCHAR* argv[])
{
B b;
return 0;
}
这一个为何输出"I am A"。多态跑哪去了??
...全文
102 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
XqYuan 2008-10-07
  • 打赏
  • 举报
回复
Java里机制如何呢?
XqYuan 2008-10-07
  • 打赏
  • 举报
回复
哦,只不过在Java里,结果不一样,奇怪罢了
jia_xiaoxin 2008-10-06
  • 打赏
  • 举报
回复
因为b在够造之前要构造父类A,而此时b对象还未生成,当前的this指针指向的A,
所以调用的是A的doSth,这不正是显示了类的多态性么。
当b对象生成之后,
B b;
A * a = &b;
a->doSth();
doSth()输出:

I am B

这也显示了多态性。
qiuchengw 2008-10-06
  • 打赏
  • 举报
回复
奇怪,你这样写,牵涉到多态了么?
B b; //这样首先调用基类A的构造函数,基类的构造函数中调用了其本身的成员函数doSth,输出 I am A,没什么奇怪的啊
要多态,必须有引用或者指针才会体现的出来.
palmax 2008-10-06
  • 打赏
  • 举报
回复
在构造函数里,因为B还没有构造好,多态实际上是被disable的,所以虚函数表里绑定的函数地址是A::doSth()

楼主基本概念不牢靠啊
注明:转发 软件作者:老费 2007/5/26:增加了文件头多态功能,在文件头入口以及异或部分,增加了多态模块,如果你在设置中选择了多态,会在这2个部分增加随机的代码(每次捆绑都不同),以达到防止一定程度的特征码定位。PS:这里的多态玩具性质大于实用性,对AVER没什么挑战性,但无论怎么说,I DONE IT :) 版本号升级为:1.2 大家如果对程序有什么疑问或希望程序往哪个方面发展,请就在邪八这里跟帖告诉我,THX 当然,最重要的是,如果有BUG,一定要记得告诉我哈。 MD5: 48d42c46d11f9eb4e836d94cc08359e1 Ek Chuah 1.2.exe 2007/5/9:修改了解绑方式. 2007/5/7: 大家好,5/1过的怎么样? 我在这里给大家带来一个捆绑工具,5/1在公司加班的时候无聊写的。 在2K 和 XP SP2 下初步测试了一下。 注意点:解捆绑时,会在系统目录下建立文件,所以要有相应的操作权限才行。其他没什么可说的,具体看软件说明吧。还有,对有些文件,比如eBook Workshop压成的电子书,某些自解压文件,某些古怪的壳,作为宿主出现,可能会不行,还在改善中... 因为我测试的不是很仔细,如果有什么BUG请跟帖,说明操作系统,具体情况,最好能给出待捆绑文件/宿主文件,或捆绑后的文件。我会尽快完善。 因为最近出差比较多,上网机会会少点,大家有问题在这里发帖,或去我的站发都可以,我一有时间就会上来看滴。 如果有好的建议也一定要告诉我哈 希望大家喜欢 :) ;********************************************************** MD5:987f5706325dec1d4fcfae2503dbdcf3 Ek Chuah.exe 软件说明: 版本号:1.0版 软件作者:老费 技术支持:EChuah.bloggles.info 软件的设置以及使用方法如下: 1>在软件界面左侧相关设置栏,选中它显示当前所有设置,并可以对当前设置进行测试是否正确,测试正确后可以点击"开始合并"进行合并。 2>双击"相关设置"展开"基本设置"和"高级设置" 3>在基本设置中有3个设置项目,1:待合并文件:就是你要合并到其他文件上去的可执行文件;2:宿主文件:就是要被待合并文件插入的文件,合并前请先备份; 3:合并模式,一,搜索多余字节,在宿主文件中搜索00字节,尝试把待合并文件分散插入到00字节中去,这种合并方式适合宿主文件较大,而待合并文件较小的情况。优点是宿主文件合并前后字节不变。 二,扩展最后一节表,把宿主文件的最后一个节表增加待合并文件的大小,然后写入,需要注意,如果宿主文件不是纯PE文件,如那种安装包或加了某些壳,这种情况下就不适用。 三,在宿主文件末端增加一个新节。上面2种都不行的话,只有试试这个了。 4>高级设置有3项,1:入口点模糊EPO深度,如果你对这个概念不清楚,可以到网上查,或者保持默认设置:0,众所周知,我们要在宿主运行时获得控制权来做我们要做的事,至于什么时候获得控制权就是这个选项的事了,如果它为0,我们将在宿主程序的入口点获得控权,当他不为0,我们将从入口点开始搜索指令,第n(n就是设置的数)条指令时我们将获得控制权并把文件解绑,运行,作用?防止一定程度的入口点定位。如果你要改变这个设置,请确定你有足够了解宿主的结构,如果不确定,请保持为0。PS:无论你设置多少数字,我们只对入口点开始的100字节进行搜索(正常来说足够了)。这里指的第N条指令,是物理意义上的,而不是逻辑意义上的,也就是说,如果你定位了一个指令,而这个指令在宿主程序的逻辑中是没什么机会被执行的,比如:出某个错误时的处理,那么,我们也就没什么机会拿到控制权了。当然,这也意味着,请注意。如果你有创意,完全可以在当宿主结束的那一刻,启动你的小东西。:) 2:文件体加密:这个很简单,就是随机取一个种子,把它和待捆绑文件进行XOR运算进行加密。 3:文件头多态:这个就不多说了,下个版本提供时再详细说明,会对取特征码的手法做些遏制。 一般的应用,进基本设置,设置好文件路径,到相关设置处测试一下设置,根据反馈调整一下,一般就是调整一下合并模式,就OK了。高级设置都不用管,默认就OK了。 特别注意,没有对合并后的文件做标记,如果对已经合并过的文件反复进行合并,也许会出现奇怪的不可预计的现象. 2007/05/01 劳动节,OT中... 尾声:这个东西我做了1个星期,因为时间仓促,很多方面没考虑,考虑下个版本会增强某几个方面,第一是文件解绑部分实现多态,来对付特征码定位,还有就是对部分主流杀软的所谓动态监控做些处理。更重要的我想在大家帮忙的测试下,把稳定性和兼容性能进一步提高。当然,这些前提是有人需要的话,我不知道现在大家还是否需要捆绑器???或者特别需要哪些功能的捆绑器。。。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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