关于模板类重载流operator<<
template<class type, int dim>
class Point {
public:
Point() = default;
Point(type coord[]) {
for (int index = 0; index < dim; index++) {
m_coord[index] = coord[index];
}
}
//拷贝构造
Point(const Point &p) {
for (int i = 0; i < dim; i++) {
m_coord[i] = p.m_coord[i];
}
}
type operator[](int index) {
return m_coord[index];
}
//注意一定要加std::ostream
//我看到有些人在这里也添加
//template<class type, int dim> 这行有没有都无所谓,都可以编译通过
friend std::ostream& operator << (std::ostream &os, const Point &p) {
for (int i = 0; i < dim; i++) {
os << p.m_coord[i] <<" ";
}
return os;
}
private:
type m_coord[dim];
};
int main()
{
int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
Point<int, 10> point(arr);
printf("poing =%d\n", point[2]);
std::cout << point<<std::endl;
Point<int ,10> point2(point);
std::cout << point;
getchar();
}
一个要点就是符号重载<<一定要是friend友元函数,另外一个就是记得添加std命名空间。