当前位置: 首页 > news >正文

从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); // 后置++

相关文章:

  • Deepseek R1模型本地化部署与API实战指南:释放企业级AI生产力
  • 如何在 Vue 3 中使用 Vue Router 和 Vuex
  • 联想小新 510S-14IKB (80UX) 原厂Win10系统oem镜像下载
  • Hive查询之排序
  • 面试题整理:操作系统
  • Python 用户输入和While循环(使用while 循环来处理列表和字典)
  • PerfMonitor高效处理器性能监控与分析利器
  • [实现Rpc] 客户端划分 | 框架设计 | common类的实现
  • React AJAX:深入理解与高效实践
  • Java 数据类型
  • pptx2md - 将PPT文件转换成Markdown
  • 从零搭建微服务项目(第7章——微服务网关模块基础实现)
  • 如何解决DeepSeek服务器繁忙的问题?
  • JUC并发-4.wait和notify以及Atomic原理
  • 【JavaWeb学习Day16】
  • 什么是scaling laws?
  • 实现MiniQMT远程下单:跨设备交易指令的高效传递
  • pnpm, eslint, vue-router4, element-plus, pinia
  • Spring AOP源码解析
  • 【RocketMQ 存储】CommitLogDispatcherBuildConsumeQueue 构建 ConsumeQueue 索引
  • 自然资源部:不动产登记累计化解遗留问题房屋2000多万套
  • 宜昌谱写新叙事:长江大保护与高质量发展如何相互成就
  • 证券时报:中美互降关税落地,订单集中补发港口将迎高峰期
  • 广西北部湾国际港务集团副总经理潘料庭接受审查调查
  • 京东回应外卖系统崩溃:订单暴涨所致,已恢复
  • 加强战略矿产出口全链条管控将重点开展哪些工作?商务部答问