舉例分析private的作用(c/c++學(xué)習(xí))
c++中private的用處
我知道我們可以用 public 中的值,把private中的數(shù)據(jù)給提出來,但是還是搞不懂private該怎么用,或者說在一個具體程序中,private有什么用。
class fun{ public: void setname(string x) { name =x; } string getname() { return name; } private: string name; }; /*主函數(shù)*/ int main() { fun ob; ob.setname("you are apples"); cout << ob.getname() <<endl; system("pause"); return 0; }
作用說明:
【way 1】
這是面向?qū)ο缶幊讨械臇|西。
首先你要有一個類的概念,如果沒有類的概念,就不會知道為什么需要private、protected和public。
類首先是一種抽象,是一個定義。比如說人類就是一個抽象的定義,具體到我們每個人就是這個類的對象。雖然你我都屬于人類,但可能我們姓名不同,性別不同,年齡也不同,因此類需要有屬性。除了屬性,類還需要有方法,類的方法是這個類對外所提供的交互接口。例如人類可以對外提供走路、說話、吃飯等方法。類的屬性通常會聲明為private,也就是私有的,然后提供一個公有的方法來訪問它。你不理解的其實就是這里,不知道為何要“多此一舉”,直接將屬性聲明為public,直接訪問不就可以了嗎?
其實,從程序編譯的角度來講這么做是沒有問題的,只是,從面向?qū)ο蟮慕嵌葋碇v,有三個重要的概念,分別是封裝、繼承和多態(tài)。如果將類的屬性直接以public的形式對外暴露,實際上就喪失了封裝性。什么是封裝?封裝就是讓內(nèi)部細(xì)節(jié)對外不可見。類的一個設(shè)計原則就是,不要把自己的內(nèi)部實現(xiàn)細(xì)節(jié)對外暴露,只對外提供一個功能接口,也就是公有的方法,至于類這個方法里面具體是怎么實現(xiàn)的,外部不需要知道也不應(yīng)該知道。就以你代碼里setname這個方法為例,一個完整的名字應(yīng)該包括姓和名。假如說你規(guī)定姓在前名在后,中間用一個空格來分割。那么如果使用setname方法,你就可以在setname時對外部輸入的名字進(jìn)行檢查,看看中間是不是有個空格,如果沒有的話可能需要返回一個設(shè)置失敗
。另外,類的內(nèi)部,可能是使用一個string類型的變量name來直接保存姓和名,也可以定義2個string變量,一個用來保存姓一個用來保存名,可以在setname方法中將用戶的輸入以空格拆開,分別填到這2個變量里。可見,就一個簡單的setname,其實你類的內(nèi)部,可以用不同的方法來實現(xiàn)。但是這種實現(xiàn)的差異,對于類的使用者來說是不關(guān)系的,類的使用者只需要知道它可以調(diào)用setname來設(shè)置名字就可以了,而無需關(guān)心你這個類里面究竟是用一個string對象還是兩個string對象來保存名字。這其實就是一個封裝。如果你直接以public類型對外提供名字屬性,你實際上就喪失了封裝性,因為你把內(nèi)部的實現(xiàn)細(xì)節(jié)暴露給了外部。
相信,你應(yīng)該明白了很多。
【way 2】
簡單來說就是編寫大工程的時候有用,剛學(xué)c++的人會很迷惑,因為你用不到,而且還麻煩,不如公有的方便。
但是大工程上是避免出錯的好方法。因為你寫了一個軟件,跟第三方合作開發(fā),計算工資的部分你這里把關(guān),可是第三方的人如果可以操作你內(nèi)部數(shù)據(jù),他直接修改了工資的值,你就虧了,所以你要把工資這個變量設(shè)為私有的,這樣第三方的人就不能直接修改你的值了。
到此這篇關(guān)于舉例分析private的作用(c/c++學(xué)習(xí))的文章就介紹到這了,更多相關(guān)private作用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)二叉樹遞歸
這篇文章主要為大家介紹了C語言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)二叉樹遞歸,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05linux c 查找使用庫的cflags與libs的方法詳解
本篇文章是對在linux中使用c語言查找使用庫的cflags與libs的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05static_cast,dynamic_cast,reinterpret_cast,const_cast的區(qū)別及用法詳解
以下是對static_cast,dynamic_cast,reinterpret_cast,const_cast的區(qū)別及用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-09-09C++ 簡單實現(xiàn)MFC ListControl 點擊列頭排序
這篇文章主要介紹了C++ 簡單實現(xiàn)MFC ListControl 點擊列頭排序的相關(guān)資料,需要的朋友可以參考下2015-06-06