面向对象编程的多态从绑定时间来看,可以分成静态多态和动态多态,也称为编译期多态和运行期多态。
应用形式上:
静多态是发散式的,让相同的实现代码应用于不同的场合。
动多态是收敛式的,让不同的实现代码应用于相同的场合。
思维方式上:
静多态是泛型式编程风格,它看重的是算法的普适性。
动多态是对象式编程风格,它看重的是接口和实现的分离度。
静态多态
(1)函数多态(重载):函数名一样,参数类型或个数不一样,返回类型可以一样也可以不一样。
int max(int x,int y){...}
double max(double x,double y){...}
(2)宏多态:
#define ADD(A,B) (A)+(B);
int a = 1;
int b = 2;
String c = "1";
String d = "2";
输出ADD(a,b)得到整型数3,输出ADD(c,d)得到字符串12。
(3)模板
动态多态
(1)继承和虚函数机制
class A{
public:
virtual ~A(){}
virtual void out(){
cout<<"I am BaseClass."<<endl;
}
};
class B:public A
{
public:
virtual void out(){
cout<<"I am DerivedClass."<<endl;
}
};
int main()
{
A *p=new B;
p->out();
}