ATL布幔之下的秘密(3)
2006-07-22 22:54:58 来源:WEB开发网核心提示: (译注:作者Amjad在上面两个程序中并未实现拷贝构造函数和赋值运算符,这大概是由于这两者对于本文的内容无关紧要之故吧,ATL布幔之下的秘密(3)(3),在此我要指出的是正如作者所说,“不是真的要写一个专业的堆栈类”、“没有任何错误检验”,所
(译注:作者Amjad在上面两个程序中并未实现拷贝构造函数和赋值运算符,这大概是由于这两者对于本文的内容无关紧要之故吧。在此我要指出的是正如作者所说,“不是真的要写一个专业的堆栈类”、“没有任何错误检验”,并且这其中类的组织结构使得精确实现拷贝构造函数和赋值运算符有一定的难度,尤其是程序37——我们无法从一个已经定义好的堆栈获得它的最大容量。)
你也可以将用户定义的类作为一个类型参数来传递,但是请确认这个类拥有在那个模板函数或类模板中重载的所有运算符。
例如,请看程序35那个求最大值的函数。这个程序使用了一个operator >,所以如果我们传递自己的类的话,那么这个类必须重载了>运算符。下面这个例子示范了这一点。
程序39.
#include <iostream>
using namespace std;
template <typename T>
T Maximum(const T& a, const T& b) {
return a > b ? a : b;
}
class Point {
private:
int m_x, m_y;
public:
Point(int p_x = 0, int p_y = 0) : m_x(p_x), m_y(p_y) {
}
bool friend operator > (const Point& lhs, const Point& rhs) {
return lhs.m_x > rhs.m_x && lhs.m_y > rhs.m_y;
}
friend ostream& operator << (ostream& os, const Point& p) {
return os << "(" << p.m_x << ", " << p.m_y << ")";
}
};
int main() {
Point a(5, 10), b(15, 20);
cout << Maximum(a, b) << endl;
return 0;
}
程序的输出为:
更多精彩
赞助商链接