关于模板类重载流operator<<

2023-11-14

关于模板类重载流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命名空间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于模板类重载流operator<< 的相关文章

随机推荐