天天看點

《C++面向對象高效程式設計(第2版)》——4.11 類和類型

本節書摘來自異步社群出版社《c++面向對象高效程式設計(第2版)》一書中的第4章,第4.11節,作者: 【美】kayshav dattatri,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

c++面向對象高效程式設計(第2版)

到目前為止,我們一直将類作為oop中的基本實體。但是,從語言類型機制的角度來看,類幾乎可以看做是添加至語言中的一個新類型1。在c++和eiffel中更是如此。類代表一個新類型,而對象就是該新類型的執行個體。與基本類型(或語言定義類型)一樣,類有一些限制和責任。而且,語言對于類對象如何與其他類對象混合也存在一些規則。這與各語言定義類型的相容性問題非常類似。例如,可以将整數指派給浮點變量,但卻不能将double類型變量指派給char類型變量。這樣的限制也适用于類和對象,隻有相關類的對象才能互相相容。例如,如果tcar是tvehicle的子類(即tcar從tvehicel派生),那麼tcar類的對象便可與tvehicle類的對象相容。通過下一章讨論的繼承機制即可實作。

既然類像是程式員定義的新類型,那麼程式員必須十分了解類的屬性、特權和責任。正如語言設計者必須了解語言定義類型一樣,類的設計者必須将重點放在類上。一般而言,一個類的對象不能與其他類的對象混合(進行指派),除非類之間是通過繼承相關的。類層次的設計者可以實作這種繼承。換言之,兩個對象隻有在設計者希望它們相容時才能相容。除此之外的其他情況,類是有差異的、不相容的類型。

使用這種将類作為類型(class-as-a-type)的方案可以編寫出更好的軟體,而且在編譯時即可驗證其正确與否。因為每個類都是一個新類型,是以可以強制執行非常嚴格的類型檢查。這使得程式更加強健和可靠。

1在大多數語言中都可以這樣了解,但也有一些例外。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

繼續閱讀