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的複製建構函式被呼叫