一、函数模板
template<typename T> //可选参数 <typename T1, typename T2....>
T j_max(T t1,T t2)
{
return t1 > t2 ? t1:t2;
}
int main(int argc, char* argv[])
{
int a = j_max(2,3); //调用方式1:直接调用模板函数
cout<<a<<" and <<j_max<int>(2,3)<<endl; //调用方式2:T指定为int
}
【点评】里面有2中调用的方式
二、静多态
//实现方式一
class A
{
public:
static void draw()
{
}
};
template<typename Object>
void draw()
{
Object::draw();
}
void main(int argc, char* argv[])
{
draw<A>(); //函数模板的使用
}
//实现方式二
class Circle
{
public:
void draw(){ cout<<"circle"<<endl;}
};
class Rectangle
{
public:
void draw(){ cout<<"Rectangle"<<endl;}
};
template<typename T>
void Draw( T& a) //通过栈,获得this指针
{
a.draw();
}
int main(int argc, char* argv[])
{
Circle c1;
Rectangle r1;
Draw(c1); //通过push ,里面会传递this指针
Draw(r1);
}
三、动多态
指C++虚函数所实现的就是动态的多态。
参考:1、static_cast实现C++多态