第六章 6 4節練習 6 5 1節練習

2021-06-26 10:23:23 字數 1341 閱讀 7511

練習6.39

說明在下面的每組宣告中第二條宣告語句是何含義。如果有非法的宣告,請指出來。

(a)int calc(int, int);

int calc(const int, const int);

(b)int get();

double get();

(c)int *reset(int *);

double *reset(double*);

解答:(a) 

第二條是計算兩個常量整型的數。

不合法,第二條無法和第一條進行區分。

(b) 

獲得double型別的get()

不合法,不能使用不同的返回值型別對函式進行過載。

(c) 

重置乙個double型別的數。

合法。練習6.40

下面的哪個宣告是錯誤的?為什麼?

(a) int ff(int a, int b = 0, int c = 0);

(b) char *init(int ht = 24, int wd, char bckgrnd);

解答:這兩個宣告都是合法的,但是第二個是不合理的。

第二個函式宣告的第乙個引數使用了預設實參。

這會讓呼叫的時候有些理解上的問題,是向init傳兩個引數?還是三個引數?

如書中所說,沒有提供實參的話,預設實參才會使用到,所以這裡還是需要傳遞三個引數的,

否則程式無法編譯通過。

練習6.41

下面的那個呼叫是非法的?為什麼?哪個呼叫雖然合法但顯然與程式設計師的初衷不符?為什麼?

char *init(int ht, int wd = 80, char bckgrnd = ' ');

(a) init();

(b) init(24, 10);

(c) init (14, '*');

解答:(a)呼叫是非法的。這裡init函式至少需要傳遞進去乙個引數,而這個呼叫沒有傳遞引數,ht引數沒有得到實參,必然會出現編譯錯誤。

(c)是合法的,但是與初衷不符。這裡應該是想將ht置為14, bckgrnd置為『*』。而結果是,ht為14,wd為『*』的ascii碼值,bckgrnd還是『 』

練習6.42

給make_plural函式的第二個形參賦予預設引數『s』,利用新版本的函式輸出單詞success和failure的單數和複數形式。

解答:

#include #include using namespace std;

string make_plural(size_t ctr, const string &word, const string &ending = "s")

int main()

第六章 6 2 5節練習 6 2 6節練習

練習6.25 編寫乙個main函式,令其接受兩個實參。把實參的內容鏈結成乙個string物件並輸出出來。解答 include include using namespace std int main int argc,char argv cout option endl 練習6.26 編寫乙個程式,...

第六章 6 6 1節練習 6 7節練習

練習6.52 已知有如下宣告,void manip int,int double dobj 請指出下列呼叫中每個型別轉換的等級 參見6.6.1節,第219頁 a manip a z b manip 55.4,dobj 解答 a 5 字元字面轉char 3 char轉int b 5 double轉in...

第六章 6 1 1節練習

練習6.6 說明形參 區域性變數以及區域性靜態變數的區別。編寫乙個函式,同時用到這三種形式。解答 只要定義有引數的函式,就會涉及到形參。區域性變數,就是只能在區域性使用的變數,無法在其他地方進行使用。當然,其還可以對全域性同名變數進行隱藏。區域性靜態變數,也是在區域性使用,但是其銷毀會在程式結束之後...