泛型,在调用函数或使用该类时才指定特定的类型,可以避免重复写类似功能代码。那C++语言如何定义泛型呢?
/*
* Author:W;
* 泛型-模板:只有在调用或使用该函数或类时,才确定类型
* 1.泛型函数
* 2.泛型类
*/
//引入标准输入输出流
#include <iostream>
using namespace std;
#include <vector>
/*泛型函数*/
template <typename T>
T Max(T a, T b)
{
return (a > b) ? a : b;
}
/*泛型类*/
template <class T>
class Stack
{
public:
void push(T e);//入栈
void pop();//出栈
T top();//返回栈顶元素
bool isEmpty();//判断是否为空
private:
vector<T> elements;
};
//检查栈中是否还有元素
template <class T>
bool Stack<T>::isEmpty()
{
return elements.empty();
}
//元素入栈
template <class T>
void Stack<T>::push(T e)
{
elements.push_back(e);
}
//元素出栈
template <class T>
void Stack<T>::pop()
{
if (!elements.empty())
{
elements.pop_back();
}
}
//返回栈顶元素
template <class T>
T Stack<T>::top()
{
if (!elements.empty())
{
return elements.back();
}
return NULL;
}
//main程序执行入口函数
int main()
{
cout << "====泛型函数====" << endl;
cout << Max(2, 5) << endl;//整数比较
cout << Max(3.5f, 2.1f) << endl;//浮点数比较
cout << Max("BaiDu", "YaHu") << endl;//字符串比较
cout << "====泛型类====" << endl;
Stack<int> intStack;
intStack.push(3);
cout << "取出intStack当前栈顶元素 =" << intStack.top() << endl;
Stack<string> strStack;
strStack.push("W");
strStack.push("L");
strStack.push("Q");
strStack.pop();
cout << "取出strStack当前栈顶元素 = " << strStack.top() << endl;
}
运行结果如下: