1. 程式人生 > >練習6.40、6.41

練習6.40、6.41

位置 保持 默認實參 char 寫到 必須 函數 asc 初始

6.40:下面的哪個聲明是錯誤的?為什麽?

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

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

Ans:b)的聲明是錯的。C++規定,要把沒有默認實參的形參放到前面,而默認實參的形參寫到靠右的位置,並且一個形參如果有默認實參,那麽其右側必須都有默認實參。

6.41:下面的哪個調用是非法的?為什麽?哪個調用雖然合法但顯然與程序員的初衷不符?為什麽?

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

(a)init();  (b)init(24,10);  (c)init(14 , ‘ * ‘ );

Ans:a)非法調用。因為函數聲明中有一個形參沒有默認實參,在調用時應該提供一個實參,而不能全部省略。

   b)合法調用。將函數聲明形參中的ht初始化為24,wd初始化為10,後面的形參保持不變。

   c)合法調用但是不符初衷。由於‘ * ’的十進制ASCII碼是42,所以會將函數聲明中的ht初始化為14,wd初始化為42,其他的保持不變。

練習6.40、6.41