模板函数与函数模板
//函数模板
template <typename T>
//template <class T>
const T Max(const T& a, const T& b)
{
return a > b ? a : b;
}
int main()
{
//在编译的过程中根据实参推演出模板函数
int a = Max(12, 23);
/*
typedef int T;
const T Max(const T & a, const T & b)
{
return a > b ? a : b;
}
*/
char b = Max<char>('s', 'a');
/*
typedef char T;
const T Max(const T & a, const T & b)
{
return a > b ? a : b;
}
*/
return 0;
}
做两数相加:
template <typename T>
T Add(T a, T b)
{
return a + b;
}
int main()
{
cout << Add(12, 23) << endl;
cout << Add(12.23, 34.56) << endl;
return 0;
}
两数相乘:
template <typename T>
T Add(T a, T b)
{
return a * b;
}
int main()
{
cout << Add(12, 23) << endl;
cout << Add(12.23, 34.56) << endl;
return 0;
}
简单设计一个栈:
template <typename T>
class Stack
{
private:
T* data;
int maxsize;
int pos;
public:
Stack(int x = 10)
{
maxsize = x;
pos = -1;
data = new T[maxsize];
}
~Stack()
{
maxsize = 0;
pos = -1;
delete[]data;
data = nullptr;
}
int size() const//使用常方法是为了让常对象和普通对象都可以调用,增加代码的复用性
{
return pos + 1;
}
bool full() const
{
return size() == maxsize;
}
bool empty() const
{
return size() == 0;
}
void push(const T& x)
{
if (!full())
{
pos += 1;
data[pos] = x;
}
}
T& top()//普通对象可以调用但是常对象不可以调用
{
return data[pos];
}
const T& top() const//普通对象和常对象都可以调用
{
return data[pos];
}
void pop()
{
pos -= 1;
}
};
int main()
{
stack<int> ist;//编译器推演出一个整型栈
stack<double> dst;//编译器推演出一个double类型的栈
return 0;
}
总的来说,模板也就是产生代码的代码~