知識點2:當構造函數委托給另一個構造函數時,受委托的構造函數的初始值列表及其函數體先被執行,接著才會執行到委托函數的函數體。
class OH{OH(string s, int a, int b):book(s),price(a),sale(b){cout<<"OH(string s, int a, int b)"<<endl;} //三參數構造函數的參數列表和函數體首先被執行OH():OH(" ",0,0);//默認構造函數又委托給了三參數構造函數OH (istream& is):OH(){cout<<"OH (istream& is)"<<endl;}//OH (istream& is)是一個委托構造函數,它委托給了默認構造函數OH()string book;int price;int sale;};PS:41、42知識點為C++11特性
1:當類的作用域內不需要使用任何初始值定義非靜態變量時 2:當類中含有需要使用默認構造函數當作被委托構造函數時 3:類的成員沒有在構造函數初始值列表中顯示初始化時 知識點2:當類中定義了其它類型的構造函數時,最好提供一個默認的構造函數,養成良好的習慣。 知識點3:類聲明對象是不需要加括號!加括號是聲明函數的。
OH oh();//不合法的實例化OH oh;//合法(a):錯誤,類本身不提供構造函數時,編譯器會自動合成一個默認構造函數 (b):錯誤,為成員提供默認值的構造函數也成為默認構造函數 (c):錯誤,見43題知識點1 (d):錯誤,當類沒有定義構造函數時,才會默認編譯器生成默認構造函數。
知識點2:通過一個實參調用的構造函數定義了一條從構造函數的參數類型向類類型隱式轉換的機制 知識點3:可以將構造函數聲明為explicit加以限定該類型轉換
優缺點:這樣的隱式類型轉換只能作用于單參數的構造函數,但是相較于兩步的顯示轉換,這樣的隱式轉換則會省去很多麻煩
因為皆顯示地聲明了屬于Salesdata類
(a)合法 (b)不合法,Salesdata&類型與Salesdata類型之間不可轉換 (c)不合法,const不對,因為combine本身是需要改變傳入參數的
新聞熱點
疑難解答
圖片精選