主页 > IT业界  > 

从Vec3实现复习运算符重载

从Vec3实现复习运算符重载

三维向量是计算几何中常用的基本类 下面对其进行解析 代码来源: 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实现复习运算符重载