除了 通用函数 外,还可以定义通用类。
通用类的定义形式如下:
[C++] 纯文本查看 复制代码 template <class Ttype> class class-name {
...
}
在上面定义中,Ttype 是类型名字占位符,在对类进行实例化时会用实际的数据类型替换它。如果需要多个通用数据类型,那么可以使用逗号分隔参数列。
在创建了通用类后,可以使用下面的通用形式来生成类的实例:上面代码中,type 是对象需要使用的数据类型。通用类的成员函数也会自动成为通用函数,不需要显式的使用 template 来声明它们。
下面是一个简单的读写队列实例:
[C++] 纯文本查看 复制代码 using namespace std;
const int SIZE = 100;
//创建通用类
template <class QType> class queue {
QType q[SIZE];
int sloc, rloc;
public:
queue() { sloc = rloc = 0; }
void qput(QType i);
QType qget();
};
//将一个对象放入queue中
template <class QType> void queue<QType>::qput(QType i)
{
if (sloc == SIZE) {
cout << "Queue is full.\n";
return;
}
sloc++;
q[sloc] = i;
}
//从queue中获得一个对象
template <class QType> QType queue<QType>::qget()
{
if (rloc == sloc) {
cout << "Queue Underflow.\n";
return 0;
}
rloc++;
return q[rloc];
}
int main()
{
//创建两个整数类型数据的 queue 对象
queue<int> a, b;
a.qput(10);
b.qput(19);
a.qput(20);
b.qput(1);
cout << a.qget() << " ";
cout << a.qget() << " ";
cout << b.qget() << " ";
cout << b.qget() << "\n";
//创建两个双精度浮点型数据的 queue 对象
queue<double> c, d;
c.qput(10.12);
d.qput(19.99);
c.qput(-20.0);
d.qput(0.986);
cout << c.qget() << " ";
cout << c.qget() << " ";
cout << d.qget() << " ";
cout << d.qget() << "\n";
return 0;
}
运行输出:10 20 19 1
10.12 -20 19.99 0.986 在上面程序中,声明了两种不同类型的队列对象,一种是 int 队列对象,另一种是 double 型队列对象:
[Plain Text] 纯文本查看 复制代码 queue<int> a, b;
queue<double> c, d;
注意,对象中的数据类型是放在尖括号中的。在创建对象时可以指定其数据类型,比如还可以指定:
[C++] 纯文本查看 复制代码 queue<char *> chptr;
尖括号中还可以是个结构体类型,比如:
[C++] 纯文本查看 复制代码 struct addr {
char name[40];
char city[30];
}
queue<addr> obj;
|