c++ - 使用转换运算符对两个不同类的对象进行相互转换

标签 c++ operator-overloading conversion-operator

类 B 中定义的转换运算符如何在以下代码中工作?我阅读了有关堆栈溢出的转换运算符的所有其他文章,但找不到任何关于两个不同类的对象相互转换的解释。任何帮助将不胜感激,因为我是 c++ 的新手

对于下面的代码:

#include<iostream>
using namespace std;
class A
{
    int i;
public:
    A(int ii = 0) : i(ii) {}
    void show() {  cout << i << endl;  }
};

class B
{
    int x;
public:
    B(int xx) : x(xx) {}
    operator A() const {  return A(x); }
};

void g(A a)
{
    a.show();
}

int main()
{
    B b(10);
    g(b);
    g(20);
    return 0;
}

我无法理解转换运算符是如何工作的以及如何将值分配给 A 的对象。基本上我无法理解代码流程,我想知道幕后情况,即转换是如何进行的?

最佳答案

这是发生了什么:

  1. 您创建b(类型:B)
  2. 你调用 g 传递 b 作为它的参数
  3. bB 类型,g 需要 A 类型的变量,g 寻找一种方法将 B 转换为 A
  4. AB都是类,B重载了“转换运算符”operator A()
  5. g 的输入自动转换为返回 Ab.operatorA()
  6. g 执行时 ab.operatorA()
  7. ga
  8. 上调用方法 show
  9. g 结束

关于c++ - 使用转换运算符对两个不同类的对象进行相互转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44811966/

相关文章:

c++ - 为什么当返回类型为const时可以修改返回值?

android - native C++ 库 - 谁必须释放内存以及如何释放内存?

c++ - 使用 ostream 和枚举类型重载 <<

c++ - 为什么这个类不隐式转换为指针?

C++ 重载解析、转换运算符和 const

c++ - 隐式转换运算符不参与运算符重载

c++ - msvc2013无法编译包含巨大查找表的头文件

c++ - 看不到 SpotLight - OpenGL

c++ - 无法匹配重载的运算符

C++ 重载 + 运算符只有成员函数用于添加带有整数的类对象