#独家
C++有关成员函数返回类的引用的一些问题?

2023-06-08 0 3,511
#include<iostream>
using namespace std;

class A {
public:
    int val;
    int s;
    A(int val = 0, int s = 0 ) {
        this->val = 10;
        this->s = 12;
        cout << this << endl;  //怀疑是下面的注释处 临时创建了一个变量 所以这里输出 this值 做区别
    }
    ~A() {
    }
    A& getobj() {
        return *this;
    }
};

int main() {

    A aa;
    int m, n;
    cin >> m >> n;    //输入 2 3
    aa.getobj() = m;   //想问问 这一步具体发生了什么?
    cout << aa.s << endl; //输出12 
    cout << aa.val << endl;    //输出10 

    return 0;
}

*我在中间调试的时候发现在走到 aa.getobj()=m 这一行的时候发生了又走了一遍新的构造函数 不知道这是为什么?我怀疑是中间临时构建的一个对象 但是为什么要这么做?
还有就是 为什么int变量可以赋值给自定义的类 是类似于int 赋值给double 的情况吗?就是类型的隐式转换 是这样吗?

构造函数可以用于类型转换,详见class.conv.ctor。你程序中的构造函数就可以用于把 int 转换为 class A 。

对类对象的赋值本质是一个函数调用,调用的赋值运算符。没有用户定义的话,通常会生成一个,类型是 A& operator=(const A&);。 m 作为一个 int 类型的对象,可以转换为 class A 的对象,于是用于参数调用 class A 的 opertor= ,于是就赋值了。

赋值过程了,发生了 int 类型到 class A 类型的转换,这个类型转换是通过构造函数实现的,于是构造函数被调用了。类型转换的结果是一个 class A 的临时对象。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. JK下载官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. JK下载官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. JK开发团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

JK软件下载官网 技术分享 C++有关成员函数返回类的引用的一些问题? https://www.jkxiazai.com/1786.html

JK软件应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务