#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 的临时对象。