1. 什么是多态性
1.0多态的简要介绍:多态中的态为形态的意思,在面向对象编程中是指向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为。举个例子通俗来讲就是:比如说开学了,校长把这个消息发送给了所有人,但是所有人都是一样的反应吗?老师的行为是我需要提前备好课,学生的行为是准备好作业去学校,家长需要筹集学费。然后按照其特性来又分为静态多态性和动态多态性这两种,那么这两种又有什么区别呢?
1.1静态多态性:程序在编译时就确定了调用哪一个函数,一般都是通过函数重载和运算符重载来实现的。
1.2动态多态性:不在编译时确定调用的是那一个函数,而是在运行过程中才动态指定要调用的函数。一般借助虚函数实现。
1.3举个通俗点的例子:比如你要坐车去某一个地方,你有两种交通方式可以选择,一个是坐地铁去,另外一个是打出租车。坐地铁就是静态多态性,它需要你在坐上车前就确定去哪一个位置,不然就会坐错车到别的位置。而打出租车相当于动态多态性,你在坐车的过程中可以说去哪个位置,司机就会带你去那个位置。
2. 多态性的具体实现例子
1. 静态多态性
#include<stdio.h>
using namespace std;
int add(int a,int b)
{
int c=a+b;
return c;
}
int add(int a, int b,int c)
{
int d=a+b+c;
return d;
}
int main()
{
int res1,res2;
res1=add(1,2);
res2=add(1,2,3);
cout<<"res1:"<<res1<<"\nres2:"<<res2<<endl;
return 0;
}
2. 动态多态性
#include <iostream>
using namespace std;
class Shape {
protected:
int width, height;
public:
Shape( int a=0, int b=0)
{
width = a;
height = b;
}
virtual int area()//指定基类中的成员函数为虚函数实现多态性。
{
cout << "Parent class area :" <<endl;
return 0;
}
};
class Rectangle: public Shape{
public:
Rectangle( int a=0, int b=0):Shape(a, b) { }
int area ()
{
cout << "Rectangle class area :" <<endl;
return (width * height);
}
};
class Triangle: public Shape{
public:
Triangle( int a=0, int b=0):Shape(a, b) { }
int area ()
{
cout << "Triangle class area :" <<endl;
return (width * height / 2);
}
};
int main( )
{
Shape *shape;
Rectangle rec(10,7);
Triangle tri(10,5);
shape = &rec;
shape->area();
shape = &tri;
shape->area();
return 0;
}