在网上看到一个哥们对多态的解释
一、多态性
c++的一个重要特性就是多态性,多态性就是同样的消息被不同的对象接收的时候导致完全不同的行为。消息是指对类的成员函数的调用,不同的行为是指不同的函数的实现。在c++中常见的多态的实现形式有函数重载和虚函数。
1)虚函数实现
简单的说就是允许将子类对象的指针(或者对象的地址)赋值给父类类型的指针。这个父类的指针就根据当前赋给它的子对象的特征运作。具体的说,在父类中声明一虚函数,当有多个类继承它的时候,会对这个父类的虚函数覆盖掉父类的虚函数,进行重新不同的实现。这些子类的对象的指针或者地址可以赋值给父类的指针,通过父类的指针调用虚函数的时候,实际上会调用这个子类中的虚函数的实现,而不是父类中的。这样,当不同的子类的对象的指针赋值给父类的指针的时候,通过父类的指针调用同一名称的函数但实现了不同的行为,这样就实现了多态。
2)函数的重载
函数的重载就是多个函数的名字相同,但的参数列表不同,编译器根据实际实参列表进行最佳匹配,自动完成调用哪各函数。例如运算符的重载。
二、重载与覆盖
覆盖是子类重新定义父类虚函数的做法。可见覆盖是子类与父类的垂直关系,而且函数的名称和参数列表完全相同。而重载是同一类中同名方法之间的水平关系,而且这些函数只是名字相同,参数列表不要求相同。此外,重载是根据实参列表决定调用哪个函数的,而覆盖是根据对象的类型调用不同的函数。
覆盖是子类重新定义父类虚函数的做法。可见覆盖是子类与父类的垂直关系,而且函数的名称和参数列表完全相同。而重载是同一类中同名方法之间的水平关系,而且这些函数只是名字相同,参数列表不要求相同。此外,重载是根据实参列表决定调用哪个函数的,而覆盖是根据对象的类型调用不同的函数。