abstract类中不可以有private的成员_C++ 类:声明成员函数与实现
接上文...
16.3類的成員
2.成員函數
1、構造函數
...
2、拷貝構造函數
有了類的構造函數我們就可以創建類的實例了,下圖中分別使用不同的構造函數一共創建了4個動物的對象,現在程序中就有4個活蹦亂跳的小動物了。
假如如果你特別喜歡而想有一個和seven一模一樣的小動物可以嗎?下圖中的一行代碼可以幫你做到。
上圖第91行smallAni04_copy就是一個新創建的動物,它與叫做seven的動物完全相同。那么創建這個新動物對象使用了哪個構造函數呢?這一次的創建并沒有使用前面寫的構造函數,而是使用到一個系統為Animal類添加的函數:拷貝構造函數,或稱為復制構造函數。在我們沒寫的情況下系統會為這個類自動添加這個函數,但我們自己也可以在Animal類中寫這個函數。
首先要在類中聲明這個拷貝構造函數,你會注意到這個函數的參數有些特點:參數的類型是Animal類型,說明參數是一個動物類的對象,參數類型后面的&表示傳遞的參數是一個引用,const表明這個參數是一個常量,函數體中不能修改參數。
3、屬性函數
前面我們定義在類中的數據成員——屬性,描述了這個類的所有對象共同的特征,而給屬性一個值卻是發生在構造函數創建實例對象時。由于類的屬性訪問權限被私有了(private:),類的外部是沒有任何辦法直接訪問屬性數據的。程序運行中一些類的對象常常有必要與這個類的對象交換數據,那就需要這個類來提供一些屬性訪問的“官方通道”,允許類的部分屬性能被外部對象訪問。
類要提供屬性訪問通道,就需要定義一些“屬性函數”。
上圖中類聲明了讀取這個類的name、color和height屬性的get..()函數,其中color和height屬性還可以通過set..(...)函數來修改這個屬性的數值。屬性函數的實現如下圖所示:
屬性函數提供了外界與類進行數據通信的接口,類的哪些屬性的值可以被讀取,哪些屬性的值可以被修改,取決于類的設計者。
另外,如果類中的函數(比如屬性函數)只是用來讀取屬性的數據而沒有修改屬性的值,就像上面的get...()函數,那么可以把這個函數聲明為const函數。
如果函數被const標記后,編譯器會檢查函數體中是否有修改類的屬性的代碼,c++編程標準推薦將類中的函數盡可能的聲明為const。
4、析構函數
在程序中每次通過類的構造函數創建一個類對象都要消耗一定的內存,消耗的大小取決于類中數據成員的數量和類型。當程序中不再需要一個對象時,可以把這個對象從內存中清除掉,這個工作可以由寫在類中的析構函數完成。在定義一個類時,開發者可以在類中聲明一個析構函數。
析構函數的調用是由系統完成的,開發者無需自己編寫調用代碼。如果類中沒有寫析構函數,系統在編譯類時會自動添加一個。
5、功能函數
上面介紹的幾種類函數,在類中有特定的作用,實現了類的一些基本功能。開發者在程序中定義一個類的更重要的目的是讓這個類的對象在程序邏輯中能夠完成一些特殊的使命,比如一個學生類的對象可以寫作業、吃飯、做游戲,一個筆記本電腦類的對象可以播放音樂、視頻、運行程序等等。
我們把寫在類里,讓類對象可以執行的、有趣的功能稱為類的功能函數,比如可以在這個動物類中定義讓動物吃飯、玩耍、學習、洗澡的函數。
總結
以上是生活随笔為你收集整理的abstract类中不可以有private的成员_C++ 类:声明成员函数与实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DataFormatString={0:
- 下一篇: The Art of Unix Prog