C_and_CPP 板


LINE

class 裡的 private 的意義不大? class Account{ public: bool save(int val); //存錢 bool get(int val); //領錢 private: int money; //存款 } Account man1; 很明顯我只能用 man1.save() 跟 man1.get() 來改變 man1.money 問題來了 我要使用這個 class 勢必可以看到此 class 的原始碼,當然也可以修改它 只要我把 private 這個標籤拿掉,我就可以輕鬆的使用 man1.money 那 private 的意義在哪? 感覺就像,我可以貼一張符咒在殭屍頭上,使殭屍不能走路 但是殭屍可以把符咒撕起來再走,這樣符咒整個很雞肋... 有什麼方法使用 class 卻看不到原始碼,還是說 private 有什麼其他意義在? --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.25.118.131
1F:推 buganini:get()裡面你可以檢查餘額 直接動money的話檢查不就廢了 11/30 04:26
2F:→ james732:原po問的應該是這樣達不到「隱藏實作」的目標吧...? 11/30 04:26
3F:→ buganini:假如你有分定存活存和總額 動到其中一個的時候都要update 11/30 04:27
4F:→ buganini:總額 把update的動作放在save/get裡面 可以確保資料一致 11/30 04:28
5F:→ buganini:要聞其他意義的話 防呆也是一個很有意義的意義 11/30 04:29
6F:推 buganini:抽象化的意義並不在防hack啊 11/30 04:31
7F:→ xxxx9659:真的只是為了防呆嗎?這樣感覺也太呆了... 11/30 04:31
8F:→ buganini:發射核彈的按鈕上的蓋子也是可以掀開啊XD 11/30 04:31
9F:→ buganini:請不要小看防呆 那很重要 11/30 04:32
10F:→ buganini:隱藏實做細節 不就是為了簡化操作介面 方便使用 避免蠢事 11/30 04:34
11F:→ xxxx9659:好吧 為了防止核彈發射 我相信你 11/30 04:35
12F:→ buganini:可以把發射選項轉到意外發射再按launch 11/30 04:35
13F:推 buganini:說到防呆 我舉一個我覺得很經典的例子 11/30 04:37
14F:→ buganini:插座孔一大一小 哪個是接中性線? 有些東西的接地線是作成 11/30 04:39
15F:→ buganini:插頭的形式 請問要做大的還是小的? 11/30 04:39
16F:→ buganini:(雖然據說很多水電工拉反) 11/30 04:39
17F:→ xxxx9659:記得是小的接地 11/30 04:40
18F:推 buganini:其實 大的是接地 接地插頭也是大的 因為大的插不進小洞 11/30 04:42
19F:→ buganini:所以你才不會觸電 11/30 04:42
20F:→ xxxx9659:整個猜錯@@ 11/30 04:43
21F:推 buganini:我小時後被電視護目網電過 我覺得家裡的線一定接反了.. 11/30 04:45
22F:→ buganini:不過後來有重拉過所以現在也不得而知了... 11/30 04:45
23F:推 nowar100:為了封裝 11/30 09:36
24F:→ cholid:那你可以只學C 11/30 09:50
25F:推 holymars:Effective C++ 3/e Item 22: Declare data members 11/30 10:11
26F:→ holymars:private. 看完你就會懂了。 11/30 10:11
27F:推 VictorTom:"使用 class 卻看不到原始碼", 這應該有困難; 另外, 如 11/30 10:16
28F:→ VictorTom:果使用的class是外部的lib, 只有宣告沒有定義直接給你, 11/30 10:17
29F:→ VictorTom:你自己改個public出來, 我想link應該不會過; 只有自己寫 11/30 10:17
30F:→ VictorTom:程式時覺得沒什麼, 和別人一起寫/寫程式給別人引用時 11/30 10:18
31F:→ VictorTom:private是避免人家亂搞的一個重要方法....XD 11/30 10:18
32F:推 holymars:link會過 但是跑起來非常有可能會錯 11/30 10:21
33F:→ holymars:C++ standard裡只有規定每個access section中layout順序 11/30 10:22
34F:→ holymars:要和宣告順序一樣,其他的都是implementation-dependent 11/30 10:22
35F:→ holymars:你把變數從private改成public,很可能改變class的layout 11/30 10:22
36F:→ holymars:link會過,但是跑起來之後外部lib裡本來要access那個 11/30 10:24
37F:→ holymars:private data member的code就爛掉了 11/30 10:24
38F:推 VictorTom:暈, 看來以後C++的東西不要亂說Orz 不過您不提還真的不 11/30 10:25
39F:→ VictorTom:知道private/public會影響class layout, 現在看的driver 11/30 10:25
40F:→ VictorTom:裡大家都是private/public會出現個好幾次的....Orz 11/30 10:25
41F:→ tinlans:.......問題就在於你的同事/同學要有 commit 你的檔案到 11/30 10:35
42F:→ tinlans:版本控制系統上的權限。 11/30 10:36
43F:→ tinlans:不然他改了也只能在他的 PC 上自爽而已。 11/30 10:36
44F:推 bizkit:那幹嘛要const 自己不要改不就好了 11/30 11:10
45F:→ adrianshum:想看不到實作的話,去看一看 Bridge pattern (也是所謂 11/30 12:38
46F:→ adrianshum:Handle-body) 11/30 12:38







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP