剖析多态

 从公布的文档里面看了2篇关于多态的文章,觉得没有给那些初学者讲的十分清楚;今天希望自己能为那些一心想学C++的小弟小妹奉上绵薄之力,增深他们一点C++根基!并不是说我写的比别人好,我也是阐述自己从书上得来的东西,一方面也是考验自我,看看自己能不能讲清楚;好了,废话不说了; 多态得以实现的关键在于虚函数,那么类A的定义中多一个虚函数时,我们应该知道哪件事情呢?

我们应该知道以下几点:
         cout<<sizeof(A)<<endl;       的结果会是多少呢   会比正常的没有虚函数的类占用的空间多出4个字节,因为每一个含有虚函数的类都要维护一张虚函数表(V-Table),而在类中操纵此表的就是占用那余外4个字节的名为V-PTR的指针变量;虚函数表里面都是属于此类的虚函数入口地址,用V-PTR指针的迁移完成不同函数的调用;而且子类与基类的虚函数表中的同名函数在表中的位置也是一样的!这一点很重要,只有这样才能正确完成多态;比如说基类与子类都有一个Fly()虚函数,如果它的入口地址存放于基类的V-Table表最上面,那么子类的Fly()虚函数的入口地址也会存放于子类的V-Table表最上面; 我一直在强调这一点很重要,因为这就是多态完成的关键所在,若虚函数入口地址在表中的位置不一样,多态是不可能被实现的;当然,这一点程序员是没有必要担心的,编译器已经为你做好了准备;

         有虚函数的类的析构函数也是虚的;这是为什么呢,如果我们从多态的使用情况出发,这点很容易解释!多态都是基类指针指向子类对象;但是当你良好的使用了多态性质之后,析构工作就变得很重要!这时如果你的析构函数是虚函数,那么它的入口地址同样被放入相应类的V-Table里面,这样不用用户指定,它自己就会析构很多曾经创造的对象!篇幅有限,我没有用实例或者图片来辅助大家加深理解!望谅解!不过,这些东西如果自己不自己看书,光看一篇文章是不能了解的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值