C++多态技术学习笔记

    所有派生类对象都可以看成是一个基类对象。

          如:生活知识告诉我们,动物类包括猫类,狗类等,一只狗是狗类的一个对象也是动物类的 一个对象,类似的,一只猫是猫类的一个对象也是动物类的 一个对象。

    多态技术可以看成是一种区分各个派生类对象某种方法的机制,这种机制在c++中通过虚函数实现。

          如:动物类有“叫”的一个方法。类似的,其派生类对象猫和狗也就叫的方法,但是猫和狗的叫声是不一样的,通过多态技术就可以 区分这一点,等下会说明实现的机制。

 

 

 

向上映射:

       1、通过类继承的学习,我们知道,一个派生类的地址可以赋给基类类型的指针。

       2、这种取一个对象的地址,并看成是基类的地址,就称为是向上映射。

 

 

绑定:

        1、把函数体与函数调用相联系称为捆绑。

        2、绑定分为早绑定和晚绑定两种。

                  --早绑定在程序运行之前绑定

                  --晚绑定在程序运行时绑定

 

        3、要实现晚绑定,需要一种机制,该机制可以再运行时确定对象的类型找到合适的调用函数。

 

 

虚函数:

        c++通过虚函数来实现晚绑定,在c++中晚绑定只对虚函数有作用,并只发生在我们使用一个基类的地址时,此基类有虚函数。

       

        如果一个函数在基类中定义为virtual,那么在他的所有派生类都是virtual。

 

c++实现晚捆绑:

        1、编译器对每个包含虚函数的类创建一个表VTABLE,在该表中编译器放置特定类的虚函数地址。

        2、每个带有虚函数的类对象中,有一个指向这个对象的VTABLE的指针。

        3、在VTABLE中放置虚函数的代码(如果相应的虚函数在继承类中作了修改,那么函数的实现为修改后的函数,如果未修改,那么函 数的实现为基类的函数实现)。

        4、以基类的指针执行派生类对象。

             --首先基类指针会找到VTABLE指针,接着找到相应的函数执行。应为不同的派生类对基类的虚函数做了相应的修改,所以VTABLE中的函数一般为和相应派生类的函数。继而执行的也是派生类的虚函数,这样就能根据VTABLE执行不同的操作,实现多态。

 

 

 

 

 

 

待续...

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值