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
.