主要写了基于指针、基于虚函数、基于模板的多态的例子,大神们请直接忽视、、、
#include<iostream>
using namespace std;
int add(int x,int y){
return x+y;
}
int sub(int x,int y){
return x-y;
}
int mul(int x,int y){
return x*y;
}
int div(int x,int y){
return x/y;
}
//基于指针的多态
int cal(int x,int y,int (*pfunc)(int,int)){
return pfunc(x,y);
}
class Cal{
public:
virtual int cal(int x,int y)const=0;
};
class Add:public Cal{
public:
int cal(int x,int y)const{
return x+y;
}
};
class Sub:public Cal{
public:
int cal(int x,int y)const{
return x-y;
}
};
class Mul:public Cal{
public:
int cal(int x,int y)const{
return x*y;
}
};
class Div:public Cal{
public:
int cal(int x,int y)const{
return x/y;
}
};
//基于虚函数的多态
int cal(int x,int y,Cal const& r){
return r.cal(x,y);
}
class A{
public:
static int cal(int x,int y){
return x+y;
}
};
class S{
public:
static int cal(int x,int y){
return x-y;
}
};
class M{
public:
static int cal(int x,int y){
return x*y;
}
};
class D{
public:
static int cal(int x,int y){
return x/y;
}
};
//基于模板的多态
template<typename T>
int cal(int x,int y){
return T::cal(x,y);
}
int main(void){
cout<<cal(200,100,add)<<endl;
cout<<cal(200,100,sub)<<endl;
cout<<cal(200,100,mul)<<endl;
cout<<cal(200,100,div)<<endl;
cout<<"______________________"<<endl;
cout<<cal(200,100,Add())<<endl;
cout<<cal(200,100,Sub())<<endl;
cout<<cal(200,100,Mul())<<endl;
cout<<cal(200,100,Div())<<endl;
cout<<"______________________"<<endl;
cout<<cal<A>(200,100)<<endl;
cout<<cal<S>(200,100)<<endl;
cout<<cal<M>(200,100)<<endl;
cout<<cal<D>(200,100)<<endl;
return 0;
}