类 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 的对象。基本上我无法理解代码流程,我想知道幕后情况,即转换是如何进行的?
最佳答案
这是发生了什么:
- 您创建
b
(类型:B
) - 你调用
g
传递b
作为它的参数 b
是B
类型,g
需要A
类型的变量,g
寻找一种方法将B
转换为A
A
和B
都是类,B
重载了“转换运算符”operator A()
g
的输入自动转换为返回A
的b.operatorA()
g
执行时a
为b.operatorA()
g
在a
上调用方法 g
结束
show
关于c++ - 使用转换运算符对两个不同类的对象进行相互转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44811966/