3w7:第三周程序填空题2
总时间限制: 1000ms 内存限制: 65536kB
描述
下面程序输出的结果是:
0
5
请填空:
#include <iostream>
using namespace std;
class A {
public:
int val;
// 在此处补充你的代码
};
main() {
A a;
cout << a.val << endl;
a.GetObj() = 5;
cout << a.val << endl;
}
输入
无
输出
0
5
样例输入
无
样例输出
0
5
提示
所缺代码具有如下形式:
A(_________________ ){ val = n; }
________________ GetObj() {
return _________________;
}
题解分析
先上完整题解代码
#include<iostream>
using namespace std;
class A{
public:
int val;
A(){
a = 0;
}
A(int v){
val = v;
}
A& GetObj(){
return *this;
}
};
int main(){
A a;
cout<<a.val<<endl;
a.GetObj() = 5;
count<<a.val<<endl;
}
分析代码a.GetObj() = 5;
首先,a.GetObj()
返回A
类型的对象,这个对象指向对象a
自己。this
是指向自身对象的指针,*this
是指针this
的值即对象本身,返回值A&
是一个引用,即a.GetObj()
的返回值就是对象a
自己本身,这样分析其实a.GetObj() = 5;
和a = 5
是等价的。
分析代码a = 5
a
是A
类型,A
类型的一个构造函数A(int v);
只有一个参数,是一个类型转换构造函数,C++会首先通过这个类型转换构造函数A(int v);
构造一个临时对象,类型转换构造函数的参数v
的值为5
,然后把这个临时对象赋值给a
,然后临时对象消亡,最后a.val
的值变成了5
.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。