程式設計實習MOOC/7997/3w7:第三週程式填空題2

afra發表於2019-05-11

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


aA型別,A型別的一個建構函式A(int v);只有一個引數,是一個型別轉換建構函式,C++會首先通過這個型別轉換建構函式A(int v);構造一個臨時物件,型別轉換建構函式的引數v的值為5,然後把這個臨時物件賦值給a,然後臨時物件消亡,最後a.val的值變成了5.

相關文章