polymophism多态:
poly-多种
morph-形态
多态的表述:具有不同功能的函数可以用同一个函数名
多态的效果:用一个函数名调用不同内容的函数,完成不同的工作。
多态性形式:
静态多态性:函数重载和运算符重载(实际就是函数的重载)实现的多态性属于静态多态性
为什么是静态多态性:在生成目标代码之前,在编译的时候系统就能决定调用的是哪个函数,因此又称编译时的多态性。(根据函数参数的类型以及个数等确定,比如:max(2.5,3.4,1.2)因为参数是三个doubke型,所以知道是调用double max(double a,double b,double c)这个函数)
动态多态性:程序运行过程中才动态地确定操作所针对的对象。(编译的时候确定不了),因此又称运行时的多态性。
基类类型的指针,在访问的时候,只能使用基类中的成员,只能执行基类中的成员函数;即使这个指针被指向了派生类对象,但是也只能访问派生类中
继承自基类的成员。
引用也是同理的。基类类型的引用,即使引用的是派生类对象,但是也只能访问派生类中继承自基类的成员。
在用同一个名字完成不同功能的过程中,有两种情况,一种是函数重载,一种是函数覆盖:
operator<<()是函数重载-------------静态多态:
ostream &operator<<(ostream &output, const Point &p)
ostream &operator<<(ostream &output, const Circle&c)
ostream &operator<<(ostream &output, const Cylinder &cy)
从上面的三个函数可知,它们的函数参数类型不同,所以编译时就可以确定调用哪个;
area()是函数覆盖,因为它们函数参数个数,函数参数类型,函数名一样,但是在类族的不同层次,也就是在不同的类。这种情况就是一个接口(成员函数的声明),多个方法!!!---------可以做到动态多态
double Circle::area()const{}
double Cylinder::area()const{}