C++練習(coursera北大c++課后習題)


week3

#1

描述

下面程序輸出的結果是:

0

5

請填空:

 1 #include <iostream>
 2 using namespace std;
 3 class A {
 4 public:
 5     int val;
 6 // 在此處補充你的代碼
 7 };
 8 main() {
 9     A a;
10     cout << a.val << endl;
11     a.GetObj() = 5;
12     cout << a.val << endl;
13 }

要寫一個GetObj的成員函數,他的返回值是val,而成員函數返回成員變量的值,要用int&類型作為返回值,否則返回的是val的副本

所以這樣寫

1 int& GetObj() { return val; }

 

 

#2

描述

下面程序的輸出是:

10

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

 1 #include <iostream>
 2 using namespace std;
 3 class Sample{
 4 public:
 5     int v;
 6     Sample(int n):v(n) { }
 7 // 在此處補充你的代碼
 8 };
 9 int main() {
10     Sample a(5);
11     Sample b = a;
12     cout << b.v;
13     return 0;
14 }

本來想實現調用復制構造函數時,能將v累加:新創的對象b的v能加上給他初始化的對象的v;但是新創建的對象沒有v值,這種想法似乎只有賦值函數才可實現(即,已經初始化過的對象),所以放棄之,寫成這樣(但自己感覺不妥):

1 Sample(const Sample& n)
2 { 
3     v = 2*n.v; 
4 }

 

#3

描述

下面程序的輸出結果是:

5,5

5,5

請填空:

 1 #include <iostream>
 2 using namespace std;
 3 class Base {
 4 public:
 5     int k;
 6     Base(int n):k(n) { }
 7 };
 8 class Big {
 9 public:
10     int v; Base b;
11 // 在此處補充你的代碼
12 };
13 int main() {
14     Big a1(5); Big a2 = a1;
15     cout << a1.v << "," << a1.b.k << endl;
16     cout << a2.v << "," << a2.b.k << endl;
17     return 0;
18 }

由14行知這里要創建Big類的構造函數和復制構造函數

注意到Big類有數據成員Base b,於是乎,必須要用參數列表進行初始化

1 Big(int v_):v(v_), b(v_)
2 {
3 }
4 
5 Big(const Big& a):v(a.v),b(a.b.k)
6 {
7 }

用參數列表初始化成員的情況(2,3不是很懂,待嘗試):1.需要初始化的數據成員是類的對象;2.需要初始化cosnt修飾的類成員;3.需要初始化引用成員的數據

 

自己做的時候遇到很多不懂的問題,都是問囧陽的,小白進步中,感謝陽神!感謝耐心!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM