学过Java的看到C++的模板应该会觉得跟泛型的使用的方式非常相似,所以理解起来还是比较容易的,只不过语法有些许不同,需要花些时间去熟悉。
一.函数模板
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
template<typename T>
void max(T a,T b) {
cout << (a > b ? a : b) << endl;
}
void max(double a, double b) {
cout << "模板特例化" << endl;
}
template<typename T>
T max2(T a, T b) {
return a > b ? a : b;
}
template<typename T,int count>
void max3(T a,T b) {
for (int i = 0; i < count; i++) {
cout << (a > b ? a : b) <<" "<< count << endl;
}
}
int main() {
max<int>(1, 2);
max(1.1, 2.1);
cout << max2<int>(1, 2) << endl;
max3<int, 2>(4, 5);
return 0;
}
二.类模板
#include "stdafx.h"
#include<iostream>
#include "ConsoleApplication2.h"
using namespace std;
template<typename T>
class Rect
{
public:
Rect(T length, T height);
T calcArea();
T calePerimeter();
public:
T m_length;
T m_height;
};
/**
* 类属性赋值
*/
template<typename T>
Rect<T>::Rect(T length, T height)
{
m_length = length;
m_height = height;
}
template<typename T>
T Rect<T>::calcArea()
{
return m_height*m_length;
}
template<typename T>
T Rect<T>::calePerimeter()
{
return 2*(m_length+m_height);
}
int main()
{
Rect<int> rect(2,3);
cout << rect.calcArea() << endl;
cout << rect.calcArea() << endl;
return 0;
}