从Vec3实现复习运算符重载
- IT业界
- 2025-09-09 09:06:02

三维向量是计算几何中常用的基本类 下面对其进行解析 代码来源: github /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); // 后置++
从Vec3实现复习运算符重载由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“从Vec3实现复习运算符重载”