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 对象。