C++多态性概念、作用及实例
概念
多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOD)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。C++中的多态性具体体现在运行和编译两个方面。运行时多态是动态多态,其具体引用的对象在运行时才能确定。编译时多态是静态多态,在编译时就可以确定对象使用的形式。
C++中,实现多态有以下方法:虚函数,抽象类,重载,覆盖。
作用
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。举个例子:从一个基类中派生,响应一个虚命令,产生不同的结果。比如从某个基类继承出多个对象,其基类有一个虚方法Tdoit,然后其子类也有这个方法,但行为不同,然后这些子对象中的
任何一个可以赋给其基类的对象,这样其基类的对象就可以执行不同的操作了。实际上你是在通过其基类来访问其子对象的,你要做的就是一个赋值操作。
使用继承性的结果就是可以创建一个类的家族,在认识这个类的家族时,就是把导出类的对象当作基类的对象,这种认识又叫作upcasting。这样认识的重要性在于:我们可以只针对基类写出一段程序,但它可以适应于这个类的家族,因为编译器会自动就出合适的对象来执行操作。这种现象又称为多态性。而实现多态性的手段又叫称动态绑定(dynamic binding)。   
简单的说,建立一个父类的对象,它的内容可以是这个父类的,也可以是它的子类的,当子类拥有和父类同样的函数,当使用这个对象调用这个函数的时候,定义这个对象的类(也就是父类)里的同名函数将被调用,当在父类里的这个函数前加virtual关键字,那么子类的同名函数将被调用。
实例程序
#include <iostream>
#include <cmath>
using namespace std;
#define PI 3.1415926
//基类:Shape类
class Shape
{
多态性与虚函数
public:
    Shape(){}
    virtual double Area()
    {
        cout<<"this is Shape Area."<<endl;
        return 0;
    }
private:
};
//派生类:矩形类
class Rectangle:public Shape
{
public:
    Rectangle(double x, double y)
    {
        width = x;
        height = y;
    }
    double Area()
    {
        cout<<"this is Rectangle Area,the Area is:"<<width*height<<endl;
        return (double)width*height;
    }
private:
    double width;
    double height;
};
//派生类:圆类
class Circle:public Shape
{
public:
    Circle(double x)
    {
        radius = x;
    }
    double Area()
    {
        cout<<"this is Circle Area,the Area is:"<<PI*pow(radius,2)<<endl;
        return (double)PI*pow(radius,2);
    }
private:
    double radius;
};
//主程序
void main()
{
    cout<<"虚函数多态实例:"<<endl;
    //定义基类对象
    Shape * shape;
    //使用基类初始化
    shape = new Shape();
    shape->Area();
    //使用基类指针调用派生类的实现函数
    shape = new Rectangle(2,3);
    shape->Area();
    shape = new Circle(3);
    shape->Area();
}