總時間限制: 1000ms 內存限制: 65536kB
描述
下面程序的輸出是:ios
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; }
輸入spa
無
輸出code
10
樣例輸入對象
無
樣例輸出內存
10
先上完整的題解代碼io
#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。class
調用複製構造函數的三種狀況stream
1.初始化:當用一個對象去初始化同類的另外一個對象時 2.函數參數:若是某函數有一個參數是類A的對象,那麼該函數被調用時,類A的複製構造函數被調用 3.函數返回值:若是函數的返回值是類A的對象時,則函數返回時,A的複製構造函數被調用