ATL布幔之下的秘密(3)
2006-07-22 22:54:58 来源:WEB开发网核心提示: (15, 20)(5, 10)这个程序中最重要的部分为:Stack<Point<int> > st;在这里,你必须在两个大于号之间放置一个空格,ATL布幔之下的秘密(3)(5),否则编译器就会将它看作>>(右移运算符)并产生错误,对于这个程序我们还可以这
(15, 20)
(5, 10)
这个程序中最重要的部分为:
Stack<Point<int> > st;
在这里,你必须在两个大于号之间放置一个空格,否则编译器就会将它看作>>(右移运算符)并产生错误。
对于这个程序我们还可以这么做,就是为模板参数传递默认的类型值,也就是将
template <typename T, int iSize = 10>
换为
template <typename T = int, int iSize = 10>
现在我们就没有必要一定在创建Stack类对象的时候传递数据类型了,但是你仍然需要书写这一对尖括弧以告知编译器使用默认的数据类型。你可以这么创建对象:
Stack<> st;
当你在类的外部定义(译注:原文此处是“declare”,我以为应该是“define”更准确一些。)类模板的成员函数的时候,你仍然需要写出带有模板参数的类模板全称。
程序41.
#include <iostream>
using namespace std;
template <typename T>
class Point {
private:
T m_x, m_y;
public:
Point(T p_x = 0, T p_y = 0);
void Setxy(T p_x, T p_y);
T getX() const;
T getY() const;
friend ostream& operator << (ostream& os, const Point<T>& p) {
return os << "(" << p.m_x << ", " << p.m_y << ")";
}
};
template <typename T>
Point<T>::Point(T p_x, T p_y) : m_x(p_x), m_y(p_y) {
}
template <typename T>
void Point<T>::Setxy(T p_x, T p_y) {
m_x = p_x;
m_y = p_y;
}
template <typename T>
T Point<T>::getX() const {
return m_x;
}
template <typename T>
T Point<T>::getY() const {
return m_y;
}
int main() {
Point<int> p;
p.Setxy(20, 30);
cout << p << endl;
return 0;
}
程序的输出为:
更多精彩
赞助商链接