WEB开发网
开发学院软件开发VC ATL布幔之下的秘密(3) 阅读

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段中拷贝构造函数和赋值运算符中的那样)了,那么无疑使用模板参数是更加适合的。

上一页  1 2 3 4 5 6 7  下一页

Tags:ATL 之下 秘密

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接