深度探索c++對象模型 第二章

1,c++轉換函數:顯示轉換和隱式轉換。c++

隱式轉換爲程序員提供了很大的變量。好比整形提高,普通類型轉換爲類類型(operator int())都爲程序帶來無盡的方便。試想,若是沒有整形提高,一個short類型要加上一個int類型。須要手動轉換類型才能運算。程序員

可是隱式轉換也會遇到問題。當程序出現問題,若是是隱式轉換引發的,也很難排查到。因此在程序設計的時候,必定要考慮的很是仔細。函數

2,類中若是沒有聲明構造函數,編譯器會給類聲明一個默認構造函數。爲何要這麼作?spa

緣由是:編譯器對全部的類的構造都要調用構造函數。因此,若是類設計程序員沒有爲類聲明構造函數,則編譯器不得不這麼作。而且,編譯器聲明的默認構造函數什麼都不會作(trivial,無用的)。不會將數據成員都清0的。只是爲了知足調用規則。設計

3,指針

4,若是一個類沒有定義構造函數,則默認構造函數則什麼都不作。可是若是這個類中有其餘類對象,則會調用這個類對象的構造函數。這個調用時編譯器安插在默認構造函數之中的。若是這個類中包含多個類對象,則會按照順序將調用對應對象的構造函數的調用安插到默認構造函數。但本類的其餘數據成員仍然不可以作任何初始化操做,這個責任是程序員的。固然,若是原本有定義構造函數。那麼編譯器仍是會將調用其餘成員對象的構造函數安插到自定義的構造函數中。對象

5,若是一個沒有自定義構造函數的類繼承自一個含有構造函數的基類,則派生類的默認構造函數是非無用的(nontrival)。也就是說,派生類的構造函數會被編譯器安插代碼,用以調用基類構造函數。若是有自定義構造函數的話,則編譯器在基類的自定義構造函數中安插代碼,用以調用基類的構造函數。blog

6,當類中含有虛函數時,咱們知道,這樣的類對象是含有一個指針指向虛函數表的。那類對象的這個指針是怎麼來的?繼承

事實上,這個指針的生成是編譯器的責任。它會將生成該指針的代碼安插到默認構造函數會程序員自定義構造函數。編譯器

7,類的深拷貝和淺拷貝

默認複製構造、默認賦值構造函數都使用淺拷貝。當須要深拷貝時,本身顯示定義複製構造函數、賦值構造函數。當類中含有的對象自己支持自定義的複製構造函數、賦值構造函數,那麼若是本類的其餘數據成員都是基本數據類型的話,那能夠不用顯示定義複製構造函數、賦值構造函數。由於編譯器負責將調用成員對象的複製構造函數、賦值構造函數的代碼安插到本類的複製構造函數、賦值構造函數。固然,若是本類中有char*這樣的類型,則,須要手動增長本類的複製構造、賦值構造函數。參考c++Primer Plus 第6版第12章。

相關文章
相關標籤/搜索