首先要明白多态指的什么, 通俗点的话是 同一函数实现不同的功能,这点区别于多态。
我个人理解的多态就是一些功能不同的函数可以使用统一函数名,也就是一个函数名可以调用内容不同功能不同的函数。
比如,将父对象设置成为更多的他的子对象相等的功能,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作.
具体看这个代码(纯虚函数),
#include <bits/stdc++.h>
using namespace std;
class Shape {
public:
virtual double printArea()=0;
};
class Circle:public Shape {
public:
Circle(double a):r(a){};
double printArea();
private:
double r;
};
double Circle::printArea(){
cout<<"圆的面积为";
cout<<acos(-1.0)*r*r<<endl;
return acos(-1.0)*r*r;
}
class Rectangle:public Shape{
public:
Rectangle(double aa,double bb):a(aa),b(bb){};
double printArea();
private:
double a,b;
};
double Rectangle::printArea(){
cout<<"矩形面积为:";
cout<<a*b<<endl;
return a*b;
}
class Triangle:public Shape{
public:
Triangle(double aa,double bb):h(aa),w(bb){};
double printArea();
private:
double h,w;
};
double Triangle::printArea(){
cout<<"三角形的面积为:";
cout<<h*w/2<<endl;
return h*w/2;
}
int main(){
Circle x(1.0);
Rectangle y(2.0,1.0);
Triangle z(1.0,2.0);
x.printArea();
y.printArea();
z.printArea();
Shape* p[3];
p[0]=&x,p[1]=&y,p[2]=&z;
double res = 0.0;
for(int i=0;i<3;i++){
res += p[i]->printArea();
}
cout<<"三个图形面积为:";
cout<<res<<endl;
return 0;
}
再例如这个(虚函数):
#include <iostream>
using namespace std;
class Operator{
public:
Operator(double x,double y);
virtual double getResult();
protected:
double a,b;
};
Operator::Operator(double x,double y){
a = x;
b = y;
}
double Operator::getResult(){
return a*b;
}
class OperatorAdd:public Operator{
public:
OperatorAdd(double x,double y):Operator(x,y){}
double getResult();
};
double OperatorAdd::getResult(){
return a+b;
}
class OperatorSub:public Operator{
public:
OperatorSub(double x,double y):Operator(x,y){}
double getResult();
};
double OperatorSub::getResult(){
return a-b;
}
int main(){
Operator x(1,2);
OperatorSub y(3,3);
OperatorAdd z(1,1);
Operator *ptr = &x;
cout<<ptr->getResult()<<endl;
ptr = &y;
cout<<ptr->getResult()<<endl;
ptr = &z;
cout<<ptr->getResult();
return 0;
}
综上,虚函数实现的是子类(用指针)访问子类的函数的方法。(个人理解,不太严谨)