1樓:
這是物件導向程式設計中的東西。首先你要有一個類的概念,如果沒有類的概念,就不會知道為什麼需要private、protected和public。類首先是一種抽象,是一個定義。
比如說人類就是一個抽象的定義,具體到我們每個人就是這個類的物件。雖然你我都屬於人類,但可能我們姓名不同,性別不同,年齡也不同,因此類需要有屬性。除了屬性,類還需要有方法,類的方法是這個類對外所提供的互動介面。
例如人類可以對外提供走路、說話、吃飯等方法。類的屬性通常會宣告為private,也就是私有的,然後提供一個公有的方法來訪問它。你不理解的其實就是這裡,不知道為何要「多此一舉」,直接將屬性宣告為public,直接訪問不就可以了嗎?
其實,從程式編譯的角度來講這麼做是沒有問題的,只是,從物件導向的角度來講,有三個重要的概念,分別是封裝、繼承和多型。如果將類的屬性直接以public的形式對外暴露,實際上就喪失了封裝性。什麼是封裝?
封裝就是讓內部細節對外不可見。類的一個設計原則就是,不要把自己的內部實現細節對外暴露,只對外提供一個功能介面,也就是公有的方法,至於類這個方法裡面具體是怎麼實現的,外部不需要知道也不應該知道。就以你**裡setname這個方法為例,一個完整的名字應該包括姓和名。
假如說你規定姓在前名在後,中間用一個空格來分割。那麼如果使用setname方法,你就可以在setname時對外部輸入的名字進行檢查,看看中間是不是有個空格,如果沒有的話可能需要返回一個設定失敗。另外,類的內部,可能是使用一個string型別的變數name來直接儲存姓和名,也可以定義2個string變數,一個用來儲存姓一個用來儲存名,可以在setname方法中將使用者的輸入以空格拆開,分別填到這2個變數裡。
可見,就一個簡單的setname,其實你類的內部,可以用不同的方法來實現。但是這種實現的差異,對於類的使用者來說是不關係的,類的使用者只需要知道它可以呼叫setname來設定名字就可以了,而無需關心你這個類裡面究竟是用一個string物件還是兩個string物件來儲存名字。這其實就是一個封裝。
如果你直接以public型別對外提供名字屬性,你實際上就喪失了封裝性,因為你把內部的實現細節暴露給了外部。
相信,你應該明白了很多。
2樓:匿名使用者
這樣做可以保護類中自定義的變數不被類外訪問,是一種規範而已。其實完全可以將類中所有成員都定義為public,但這麼做就和結構體沒什麼區別了。
這個例子寫得不好,提供get和set介面會破壞name成員的封裝。
好的做法應該是:將需要訪問私有變數的類宣告為友元。
3樓:匿名使用者
簡單來說就是編寫大工程的時候有用,剛學c++的人會很迷惑,因為你用不到,而且還麻煩,不如公有的方便。
但是大工程上是避免出錯的好方法。因為你寫了一個軟體,跟第三方合作開發,計算工資的部分你這裡把關,可是第三方的人如果可以操作你內部資料,他直接修改了工資的值,你就虧了,所以你要把工資這個變數設為私有的,這樣第三方的人就不能直接修改你的值了。
4樓:匿名使用者
private:
int a,b,c;
也就是宣告幾個變數是我專有的,其他的類不可以直接修改,其他的類只能通過這個類定義的成員函式來訪問它們,
但其實這只是一個相對的保護「隱私」機制,如果一個外部函式要修改這三個變數,管你有沒有宣告友元,照樣可以直接修改它們的值,這就是c語言指標的危險之處,就算不用指標,內嵌彙編也可以修改,系統的api也可以修改....
private只是說是一個協議,讓訪問這個類變數成員的函式遵守它的隱私,但如何你不想遵守也可以
c++中private繼承是不是沒有什麼作用?為什麼要有這種繼承方式呢?
5樓:匿名使用者
不是沒有用,只是用的地方少,存在就有它的道理,只是大眾情況下用不上而已·
6樓:匿名使用者
確實沒啥用,到現在我都沒用過這個繼承
c++類中的私有成員變數有什麼作用?
7樓:匿名使用者
私有成員
抄變數,即定義在baiprivate區域的成員變數du。
對於本類成員函式來說,該zhi變數與其dao它成員變數並無區別。使用上和作用上也都相同。
對於通過物件訪問,私有成員變數無法通過物件訪問。通過這一方式可以起到保護一些資料不被隨意修改的效果。
另外,在出現繼承時,基類的私有成員變數不會被繼承。
所以,如果存在想保護不被物件引用,或者不想被繼承的成員變數,需要定義為私有。
8樓:匿名使用者
設定成共有的 不利於類封裝,會讓客戶端直接訪問成員變數 這與c++的封裝思想相悖。故對不允許客戶直接操作的成員變數應設定為私有 並可提供 介面訪問該變數
9樓:匿名使用者
通過函式自己能bai控制外du界的輸入,必要時返回錯誤zhi。
如果直dao接暴漏內部變數,會讓
版你無法控制權賦值不當帶來的問題。
另外如果內部變數改名稱或結構,還可以在函式中新增轉換,只要改此函式即可,
否則,你不得不找出所有引用改變數的地方,然後做更改。
C類中的public和private區別
public 定義的變數可以再多個類中使用。privae定義的變數只能在當前類中使用。這個使用範圍和類的封裝有關係。定義的方法也是一個道理。如果別的類中要引用定義的方法,就用public,不引用就用private定義。你在別的類中無法引用到private的方法,只能用到public的 你可以試試 在...
c 中的引用到底都有什麼用處,請問C 中的引用符號「 」到底怎麼使用?
比如int f int a 當你如下呼叫時 int b f b 編譯器會把b的值賦給a,在函式體內操作a 而如果函式定義為 int f int a 當你呼叫時,沒有這個賦值的過程,因為此時a是實參的別名,相當於直接操作了實參b 從這個例子可以看到引用的兩個特性 1 節約空間,少了一個實參賦值給形參的...
概率P和C,概率中P和C怎麼算的?這兩個的區別是什麼?
森海和你 概率中的c和p區別 1 表示不同 c表示組合方法,比如有3個人甲乙丙,抽出2個人去參加活動的方法有c 3,2 3種,分別是甲乙 甲丙 乙丙,這個不具有順序性,只有組合的方法。p表示排列方法,表示一些物體按順序排列起來,總共的方法是多少。2 性質不同 公式p是指排列,從n個元素取r個進行排列...