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

C/C++系列(2)重载各种玩法

1 . operator V&() 和 operator V*()

在 C++ 中,operator V&() 和 operator V*() 是重载操作符,用于提供对象到引用或指针的转换。这通常在自定义类中实现,以便可以方便地使用对象。

#include <iostream>class V {
public:void display() {std::cout << "Display from class V" << std::endl;}
};class Wrapper {
private:V v;public:// 重载 operator V&()operator V&() {return v;}// 重载 operator V*()operator V*() {return &v;}
};int main() {Wrapper wrapper;// 使用 operator V&()V& ref = wrapper; // 调用 operator V&()ref.display();    // 输出: Display from class V// 使用 operator V*()V* ptr = wrapper; // 调用 operator V*()ptr->display();   // 输出: Display from class Vreturn 0;
}
 在 C++ 中,当你写 V& ref = wrapper; 时,编译器会自动调用 operator V&() 来将 wrapper 对象转换为 V 的引用。以下是这一过程的详细步骤:1. 类型检查:编译器首先检查 wrapper 的类型,看到它是 Wrapper 类型,想要将其转换为 V& 类型。2.查找重载的操作符:由于 V& 是引用类型,编译器会查找 Wrapper 类中是否有重载的 operator V&()。在示例代码中,我们定义了这个操作符。3.调用重载的操作符:当找到 operator V&() 后,编译器生成一个函数调用来执行这个操作符。这个操作符返回 Wrapper 内部的 V 对象的引用。
4.赋值给引用:返回的引用会被赋值给 ref。因此,ref 现在引用了 wrapper 内部的 V 对象。

http://www.mrgr.cn/news/62451.html

相关文章:

  • 9.逆向for
  • kafka-console-ui的简介及安装使用
  • JavaEE-多线程上
  • Mybatis Plus 自定义 SQL
  • java基础面试题二面向对象
  • SAP系统与快递100系统集成案例
  • Mac用户必备的任务管理软件!三款高效工具推荐
  • MySQL架构面试题系列-MySQL面试宝典(三)
  • 算法详解——线段树
  • UBUNTU查看CPU核心数
  • GB/T 28046.2-2019 道路车辆 电气及电子设备的环境条件和试验 第2部分:电气负荷(4)
  • 代购系统的开发与应用
  • 在canon的生活
  • docker设置加速
  • 甲方AK/SK泄漏的修复和治理
  • 未来的AI数据中心网络构架是什么样的?
  • 【django】Django REST Framework 构建 API:APIView 与 ViewSet
  • 搭建SRS流媒体服务器处理多路无人机视频流
  • Vue addComponent
  • Java 的内存管理与垃圾回收机制(23/30)
  • 配置 GreptimeDB 作为夜莺监控数据源,无缝替代 Prometheus/VictoriaMetrics
  • uni 自定义组件的生命周期(自用)
  • MySQL_客户端工具建库.
  • redis模板的应用:自定义redisTemplate序列化规则 (RedisTemplate和StringRedisTemplate)
  • 刘艳兵-DBA015-对于属于默认undo撤销表空间的数据文件的丢失,哪条语句是正确的?
  • 怎么选开放式耳机好?热门爆款开放式耳机推荐!