当前位置: 首页 > 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); // 后置++

http://www.dtcms.com/a/20661.html

相关文章:

  • 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 索引
  • 基于 Ollama 工具的 LLM 大语言模型如何部署,以 DeepSeek 14B 本地部署为例
  • Web 后端 HTTP协议
  • 位运算在数据库中的运用实践-以MySQL和PG为例
  • HAProxy 实现 MySQL 服务器负载均衡实验
  • Java多线程实战探索 —— 构建高效并发系统
  • trl+DPO 算法
  • 宏任务和微任务
  • 亲测有效!使用Ollama本地部署DeepSeekR1模型,指定目录安装并实现可视化聊天与接口调用
  • 力扣hot100第五天
  • AI大模型的文本流如何持续吐到前端,实时通信的技术 SSE(Server-Sent Events) 认知