舉例分析private的作用 c c 學習

2021-08-24 18:23:37 字數 1533 閱讀 8195

1 /*c++中private的用處*/

2 /*我知道我們可以用 public 中的值,把private中的資料給提出來,但是還是搞不懂private該怎麼用,或者說在乙個具體程式中,private有什麼用。*/

3 class fun

9 string getname()

10 13 private:

14 string name;

15 };

16 /*主函式*/

17 int main()

18 {

19 fun ob;

21 cout << ob.getname() <【way 1】

這是物件導向程式設計中的東西。

首先你要有乙個類的概念,如果沒有類的概念,就不會知道為什麼需要private、protected和public。

類首先是一種抽象,是乙個定義。比如說人類就是乙個抽象的定義,具體到我們每個人就是這個類的物件。雖然你我都屬於人類,但可能我們姓名不同,性別不同,年齡也不同,因此類需要有屬性。除了屬性,類還需要有方法,類的方法是這個類對外所提供的互動介面。例如人類可以對外提供走路、說話、吃飯等方法。類的屬性通常會宣告為private,也就是私有的,然後提供乙個公有的方法來訪問它。你不理解的其實就是這裡,不知道為何要「多此一舉」,直接將屬性宣告為public,直接訪問不就可以了嗎?

其實,從程式編譯的角度來講這麼做是沒有問題的,只是,從物件導向的角度來講,有三個重要的概念,分別是封裝、繼承和多型。如果將類的屬性直接以public的形式對外暴露,實際上就喪失了封裝性。什麼是封裝?封裝就是讓內部細節對外不可見。類的乙個設計原則就是,不要把自己的內部實現細節對外暴露,只對外提供乙個功能介面,也就是公有的方法,至於類這個方法裡面具體是怎麼實現的,外部不需要知道也不應該知道。就以你**裡setname這個方法為例,乙個完整的名字應該包括姓和名。假如說你規定姓在前名在後,中間用乙個空格來分割。那麼如果使用setname方法,你就可以在setname時對外部輸入的名字進行檢查,看看中間是不是有個空格,如果沒有的話可能需要返回乙個設定失敗

。另外,類的內部,可能是使用乙個string型別的變數name來直接儲存姓和名,也可以定義2個string變數,乙個用來儲存姓乙個用來儲存名,可以在setname方法中將使用者的輸入以空格拆開,分別填到這2個變數裡。可見,就乙個簡單的setname,其實你類的內部,可以用不同的方法來實現。但是這種實現的差異,對於類的使用者來說是不關係的,類的使用者只需要知道它可以呼叫setname來設定名字就可以了,而無需關心你這個類裡面究竟是用乙個string物件還是兩個string物件來儲存名字。這其實就是乙個封裝。如果你直接以public型別對外提供名字屬性,你實際上就喪失了封裝性,因為你把內部的實現細節暴露給了外部。

相信,你應該明白了很多。

【way 2】

簡單來說就是編寫大工程的時候有用,剛學c++的人會很迷惑,因為你用不到,而且還麻煩,不如公有的方便。

但是大工程上是避免出錯的好方法。因為你寫了乙個軟體,跟第三方合作開發,計算工資的部分你這裡把關,可是第三方的人如果可以操作你內部資料,他直接修改了工資的值,你就虧了,所以你要把工資這個變數設為私有的,這樣第三方的人就不能直接修改你的值了。

舉例分析private的作用 c c 學習

c 中private的用處 我知道我們可以用 public 中的值,把private中的資料給提出來,但是還是搞不懂private該怎麼用,或者說在乙個具體程式中,private有什麼用。class fun string getname privat程式設計客棧e string name 程式設計客...

volatile的作用和舉例

1 作用 作為指令關鍵字,確保本條指令不會因為編譯器的優化而省略,要求每次直接讀值。舉例 int a 10 a 5 a 3 如果不加volatile,編譯器會認為a 3,所以上面兩條指令不會產生機器 2 習題 1 乙個引數既可以是const還可以是volatile嗎?解釋為什麼。2 乙個指標可以是v...

關於C 的private繼承問題

c 有三種繼承方式 公有繼承,私有繼承,保護繼承 這裡只對其中私有繼承做個知識筆記,以防忘記。private 關鍵字意味著除了該型別的建立者和類的內部成員函式之外,物件及子類都不能訪問。這裡注意,即使該類的物件都不能直接訪問哦,只有通過物件的內部成員函式才可以訪問 採用公用繼承方式時,基類的公用成員...