从Vec3实现复习运算符重载
三维向量是计算几何中常用的基本类
 下面对其进行解析
 代码来源:https://github.com/GPSnoopy/RayTracingInOneWeekend/blob/master/cpp/Vec3.h
三五法则定义类
一个基本的类构成
	Vec3() = default;
	Vec3(const Vec3&) = default;
	Vec3(Vec3&&) = default;
	~Vec3() = default;
	Vec3& operator = (const Vec3&) = default;
	Vec3& operator = (Vec3&&) = default;
构造函数
 拷贝构造函数
 移动构造函数
 析构函数
拷贝赋值函数
 移动赋值函数
额外的构造函数
explicit Vec3(const float a) : x_(a), y_(a), z_(a) { }
Vec3(const float x, const float y, const float z) : x_(x), y_(y), z_(z) { }
防止隐式调用
运算符重载
运算符重载有两个操作
 一个是写成内部 一个是写成外部
 外部一半要写成友元函数的形式
 在本代码中通过两个操作规避了写友元函数的形式
 1、利用已经实现的函数直接操作
inline Vec3 operator + (const Vec3& left, const Vec3& right) { return Vec3(left) += right; }
这里注意Vec3(left) 相当于创建了一个临时变量因此最终返回值是Vec3而不是Vec3&
2、利用外置接口
{
	float x() const { return x_; }
	float y() const { return y_; }
	float z() const { return z_; }
}
inline Vec3 operator + (const float left, const Vec3& right) { return { left + right.x(), left + right.y(), left + right.z() }; }
运算符重载的返回值根据实际类型决定
例如+ - * /都要返回类型
 如a=b+3 a肯定和b是两个
<< 运算符要写在外部
 osstream& operator<<(ostream& cout, const 结构& g);{ return cout}
 单目运算符的两个形式
 成员函数版:CGirl &operator++(); // ++前置
 成员函数版:CGirl operator++(int); // 后置++
