template<typename T>这句话不是全局生效,而是你在一个地方使用就要在一个地方添加
加上这句话后面用T来代替类型就完事了
struct point {
T x, y;point(T x =0, T y =0):x(x),y(y){}这个格式就是一个构造函数
这里的直接等于可能是定义的等于也可能是把左值对象内存地址清零
这里提出一个未解决的问题,在写模板的时候,如果左值是模板类,右值是常数,在没重载运算符的情况下会怎么样
};//常见的构造函数还有这种
stringstream ss(buf);//代表用buf这个字符串创建一个流
template<typename T>写模板的时候重载运算符也要用模板
point<T>operator+(const point<T>& a,const point<T>& b){return point<T>(a.x + b.x, a.y + b.y);}
类型 operator 运算符(参数(不修改要加const)){return 参数之间的运算;
}template<typename T>
ostream是输出类型流
ostream&operator<<(ostream& out,const point<T>& a){return out <<'('<< a.x <<','<< a.y <<')';}template<typename T>
istream是输入类型流
istream&operator>>(istream& in, point<T>& a){return in >> a.x >> a.y;}
模板函数,模板类也要照加不误
template<typename T>
T sum(T* begin, T* end){这里的begin end,模仿的是迭代器 模板类::iterator
T ans =0;for(T* p = begin;p != end; p++){
ans = ans +*p;}return ans;}