六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 52|回复: 0

多态的原理

[复制链接]

升级  60%

6

主题

6

主题

6

主题

童生

Rank: 1

积分
30
 楼主| 发表于 2013-1-19 04:13:51 | 显示全部楼层 |阅读模式
一直以来,就知道多态,对于实例方法才有多态,对于静态方法和变量没有多态,今天想起来查一把多态的原理,看到了一篇文章 ,豁然开朗,从c++虚地址表讲起。
   c++中的方法在类中只是个指针,指向虚函数表中地址。如果Super,Sub有继承关系,,如下:

[code="java"]struct Super
{
     int data;
     virtual int add(int i){return i;};
     virtual string toString()=0;
};
class Sub: public Super
{
public:
     string toString()
     {
         return string("Sub class");
     }
};


每个对象的虚地址表都各自维护,调用的时候,都是按照虚地址表中注册的方法去调用。这个时候Sub虚拟表中注册了add方法与toString方法,其中add方法指向了super的add方法地址,而toString方法指向Sub的toString方法地址。从而调用的时候,sub的虚拟方法表可见的toString方法与add方法分别指向了子类与父类的方法,实现了多态。
  

 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表