ATL布幔之下的秘密(3)
2006-07-22 22:54:58 来源:WEB开发网核心提示: 程序的输出为:302010我们也可以将数据类型作为一个模板参数来传递,并且为它设置一个默认值,ATL布幔之下的秘密(3)(2),让我们来稍微修改一下程序37(译注:原文为“程序36”,应为37),这个给定数据类型的数组就会被自动创建;而给构造函数传递参数则意味着构造
程序的输出为:
30
20
10
我们也可以将数据类型作为一个模板参数来传递,并且为它设置一个默认值。让我们来稍微修改一下程序37(译注:原文为“程序36”,应为37),并将堆栈的尺寸作为一个模板参数来传递,而不是作为构造函数的参数。
程序38.
#include <iostream>
using namespace std;
template <typename T, int iSize = 10>
class Stack {
private:
T m_pData[iSize];
int m_iTop;
public:
Stack() : m_iTop(0) {
}
void Push(T p_iData) {
m_pData[m_iTop++] = p_iData;
}
T Pop() {
return m_pData[--m_iTop];
}
T Top() {
return m_pData[m_iTop];
}
private:
Stack(const Stack<T>&);
Stack<T>& operator = (const Stack<T>&);
};
int main() {
Stack<int, 10> a;
a.Push(10);
a.Push(20);
a.Push(30);
cout << a.Pop() << endl;
cout << a.Pop() << endl;
cout << a.Pop() << endl;
return 0;
}
程序的输出和前一个相同。这个程序最重要的一点为:
template <typename T, int iSize = 10>
现在就有一个问题:哪一个更好呢?通常,传递模板参数的办法是优于给构造函数传递参数的。为什么呢?因为在你将堆栈尺寸作为模板参数传递的时候,这个给定数据类型的数组就会被自动创建;而给构造函数传递参数则意味着构造函数会在运行时使用new或malloc一系列功能来分配内存。如果我们已经确定在创建好堆栈之后就不再更改它的尺寸(就像上面程序中private段中拷贝构造函数和赋值运算符中的那样)了,那么无疑使用模板参数是更加适合的。
更多精彩
赞助商链接