c ++为什么这样工作:cout << obj +class_namea << endl;

问题描述

我是编程新手,并且已经开始学习c ++课程。但是我被困在关于转换构造函数和重载运算符的讲座中。所以我想问一个关于以下代码的问题:

#include <iostream>
using namespace std;

class Integer
{
public:
    Integer(){};
    Integer(int);

    int getNr();
    operator int();

private:
    int nr;
};

int main()
{
    Integer obj(5);
    int a = 20;

    cout << obj + a << endl; // prints 25

    return 0;
}

Integer::Integer(int nr)
{
    this->nr = nr;
}

int Integer::getNr()
{
    return this->nr;
}

Integer::operator int()
{
    return this->nr;
}

从到目前为止我所了解的是,当执行行cout << obj + a << endl;时,发生了类似cout << obj + (Integer)a << endl;的事情,然后两个操作数都返回'nr'值。

有人可以向我解释一下背景中发生了什么吗?

转换构造函数是否将'a'作为参数并使用它创建对象?

然后operator int();将在两个对象中都执行以返回'nr'?

对不起,如果我的问题听起来很傻,我是编程新手,我想了解其背后的逻辑。

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)