程式設計實習MOOC/7998/3w8:第三週程式填空題3

afra發表於2019-05-10

3w8:第三週程式填空題3

總時間限制: 1000ms 記憶體限制: 65536kB
描述
下面程式的輸出是:

10

請補足Sample類的成員函式。不能增加成員變數。

#include <iostream>
using namespace std;
class Sample{
public:
    int v;
    Sample(int n):v(n) { }
// 在此處補充你的程式碼
};
int main() {
    Sample a(5);
    Sample b = a;
    cout << b.v;
    return 0;
}

輸入

輸出

10

樣例輸入

樣例輸出

10

題解分析

先上完整的題解程式碼

#include<iostream>
using namespace std;
class Sample{
    public:
        int v;
        Sample(int n):v(n){}
        Sample(Sample& s){
            v = 10;
        }
};
int main(){
    Sample a(5);
    Sample b = a;
    cout<<b.v<<" "<<a.v;
    return 0;
}

在程式碼 Sample b = a;中,這裡的=初始化,而不是賦值,在用同型別的物件對物件初始化的時候會呼叫複製建構函式。形如Sample(Sample& s),以同型別的引用作為建構函式的引數的建構函式是複製建構函式。在 Sample b = a;中,a是複製建構函式的引數,呼叫建構函式的物件的v的值被賦值為10。

呼叫複製建構函式的三種情況

1.初始化:當用一個物件去初始化同類的另一個物件時
2.函式引數:如果某函式有一個引數是類A的物件,那麼該函式被呼叫時,類A的複製建構函式被呼叫
3.函式返回值:如果函式的返回值是類A的物件時,則函式返回時,A的複製建構函式被呼叫

相關文章