template.cpp,RUN
//模板函数,模板类的示例
#include <iostream>
template <typename T> //template <class T>也可
void Sort(T & first, T & second)
{
if (first > second)
{
T temp = second;
second = first;
first = temp;
}
}
template <typename T>
class Vector
{
public:
Vector() { x = y = 0; }
Vector(T x, T y) { this->x = x, this->y = y; }
Vector operator+(const Vector & second);
private:
T x, y;
};
template <typename T>
Vector<T> Vector<T>::operator+ (const Vector<T> & second)
{
Vector<T> result(this->x + second.x, this->y + second.y);
return result;
}
template <typename T, int N=10>
class TStack
{
private:
T buffer[N];
int top; //top-1为栈顶,top==0时,表示空;top==N时,满
public:
TStack() { top = 0; }
bool Empty()const
{
if (top <= 0)return true;
return false;
}
bool Full()const
{
if (top >= N)return true;
return false;
}
bool Push(const T& v)
{
if (top >= N)return false;//栈满,退出
buffer[top] = v;
top++;
return true;
}
T Top()const //调用前需要Empty()确认是否为空
{
return buffer[top - 1]
}
T& Top() //调用前需要Empty()确认是否为空
{
return buffer[top - 1]
}
T Pop() //调用前需要Empty()确认是否为空
{
T v = buffer[top - 1];
top--;
return v;
}
template <typename T2, int N2> friend std::ostream& operator<<(std::ostream& os, const TStack<T2, N2>& st);
};
template <typename T2, int N2> std::ostream& operator<<(std::ostream& os, const TStack<T2, N2>& st)
{
for (auto i = st.top - 1; i >= 0; i--)
{
os << st.buffer[i];
if (i == 0)os << "\n";
else os << "\t";
}
return os;
}
int main()
{
int arr[] = {2, 1};
Sort<int>(arr[0], arr[1]);
double arrD[] = { 2.2, 1.1 };
Sort(arrD[0], arrD[1]);
Vector<int> v1(1, 2), v2, v3;
v3 = v1 + v2;
Vector<double> vd1(1.1, 2.2), vd2, vd3;
vd3 = vd1 + vd2;
TStack<int, 5> st;
st.Push(1);
st.Push(2);
st.Push(3);
std::cout << st;
TStack<double> st2;
st2.Push(1.1);
st2.Push(2.2);
st2.Push(3.3);
std::cout << st2;
return 0;
}