[問題] data和 function 是否需要分class?

看板C_and_CPP作者 (呦厚厚)時間8年前 (2016/01/24 12:04), 8年前編輯推噓8(8031)
留言39則, 10人參與, 最新討論串1/1
最近在思考一個問題, 就是 data 和 function 是否需要分不同的class, 因為 有時候, 很多 function 的資料 就是丟參數進去, 再回傳資料, 不會需要動到 this 的 member 的 data, 所以這類的 function 我另外獨立一個class, 並且是唯一的 class, 甚至 就算需要動到 this 的 member 的 data, 我可以把整個 data 的 pointer 丟給他, 讓他去給, 也就是完全把 data和 function, 分成不同的 class, 這樣 function 就不用new delete 了, 只需要new delete data, 可以節省效能????? 但是又聽說 在c++的底層, function 和 data, 本來就有做不同的處理, function 本來就有獨立出來, 所以不需要這樣???? 不過查不到確定的資料....... 想請問大家的想法????? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.35.163.53 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1453608256.A.72E.html

01/24 12:22, , 1F
不需要member 那就static func啊 甚至給他namespace
01/24 12:22, 1F

01/24 12:22, , 2F
就好也不用塞進class了
01/24 12:22, 2F
那~~ 有需要刻意去拆開嗎 這對效能有幫助嗎??? 還是沒幫助? 只是多此一舉????

01/24 13:13, , 3F
看完不知道你在說甚麼東西 另外中間function那段
01/24 13:13, 3F

01/24 13:13, , 4F
你要function new delete甚麼東西?
01/24 13:13, 4F

01/24 13:16, , 5F
不用"動"到data member,那你寫const就好
01/24 13:16, 5F

01/24 13:16, , 6F
不用"用"到data member,那你就參考一樓的作法
01/24 13:16, 6F
抱歉喔 我寫得太簡單了 例如有個 class class A { int abc; int Add( int a, int b ); }; 我把它拆成 class data { int abc; }; class func { int Add( data &a, int a, int b ); }; 這樣子, class func 在全部的程式中, 大家都可以共用一個就好了, 要new delete 時, 就只需要 new delete data, 那如果是原本的做法 class A, new delete 時, 還必須處理 Add(); 這樣拆開來, 是否會比較省資源和效能???? ※ 編輯: yhn0tgb60 (218.35.163.53), 01/24/2016 13:31:04

01/24 13:34, , 7F
其實這就是一種design pattern阿XD
01/24 13:34, 7F

01/24 13:37, , 8F
不用 上面有說了 你用namespace就好
01/24 13:37, 8F

01/24 13:38, , 9F
然後 effective C++ item 23 寧以non-member non-friend
01/24 13:38, 9F

01/24 13:39, , 10F
取代member 函式不知道能不能解釋你的問題
01/24 13:39, 10F

01/24 13:43, , 11F
不會,而且你這樣func需要是data的friend
01/24 13:43, 11F

01/24 13:44, , 12F
除非逼不得以,否則friend還是少用為妙
01/24 13:44, 12F

01/24 13:45, , 13F
不過聽我這樣說,還不如參考standard C++是怎麼說的
01/24 13:45, 13F

01/24 13:45, , 14F
其實我 frined 用很多...... 因為我全部的 class 都把 建構式和解構式 藏起了 只有相關的 factory 才能 new delete 它........ 然後 factory 也都是單一物件..... 但是又聽說 static 不適合太多 所以就用一個 static class, 全部的 factory 只有 那個 class 可以 new.....

01/24 18:16, , 15F
你這樣跟non-virtual member function一模一樣啊
01/24 18:16, 15F

01/24 18:16, , 16F
又何苦分兩邊寫
01/24 18:16, 16F

01/24 18:45, , 17F
你可以去研究function pointer
01/24 18:45, 17F

01/24 18:46, , 18F
member funciton 跟這個有關係
01/24 18:46, 18F

01/24 18:59, , 19F
拆不拆開效率不會差太多。獨立函數別再另外包class,請
01/24 18:59, 19F

01/24 18:59, , 20F
用namespace,除非你是為了滿足某種設計模式。
01/24 18:59, 20F

01/24 19:01, , 21F
如果你 friend 真的用很多,可能有過度耦合的問題
01/24 19:01, 21F

01/24 23:45, , 22F
static 和 anonymous-namespace 對 function 的效果是一
01/24 23:45, 22F

01/24 23:46, , 23F
樣的吧
01/24 23:46, 23F

01/24 23:46, , 24F
不喜歡 static 可以改用 namespace
01/24 23:46, 24F

01/26 01:34, , 25F
member functions 原本就不會被 new / delete
01/26 01:34, 25F

01/26 01:35, , 26F
去顧慮這些東西是玩什麼玩到走火入魔啊?
01/26 01:35, 26F
在寫自己的framwork XD

01/27 09:17, , 27F
01/27 09:17, 27F

01/27 09:19, , 28F
希望原 po 只是在練習寫 framework QQ
01/27 09:19, 28F
你有什麼悲情的故事嗎 關於寫framework XD

01/27 19:54, , 29F
除非你是想用 Private Class Data
01/27 19:54, 29F

01/28 00:08, , 30F
如果分開的目的是節省效能,那完全達不到你要的目的。
01/28 00:08, 30F

01/29 11:37, , 31F
To 原 po. Framework 是基底, 一旦被應用採納, 要改動的成
01/29 11:37, 31F

01/29 11:37, , 32F
本通常不小, 尤其是界面. 即便有大量的經驗與深厚的技術都
01/29 11:37, 32F

01/29 11:37, , 33F
不記得能把 framework 做得好.
01/29 11:37, 33F

01/29 11:40, , 34F
另, 不論是 framework 或 component-based 的 library, 遠
01/29 11:40, 34F

01/29 11:40, , 35F
遠不只是 "寫 code" 這麼單純. IMHO, 更重要的是 "設計"
01/29 11:40, 35F
是的 這是一定的 所以我寫 framework 是寫自己開心的和當作品用 而且自己寫 framework 時, 會增加思考很多事情, 可以學到很多, 工作上 我一定找現成的 而且有一定的市場使用率的 來使用 ※ 編輯: yhn0tgb60 (220.132.169.16), 01/29/2016 18:14:16

01/29 19:36, , 36F
Java 的陣列是物件,它就是這樣的實作方式
01/29 19:36, 36F

01/29 19:36, , 37F
陣列除了 lenght 以外的成員函式都被放在 java.util.Arra
01/29 19:36, 37F

01/29 19:36, , 38F
ys
01/29 19:36, 38F

01/29 19:36, , 39F
而陣列這個 class 則由 JVM 動態生成
01/29 19:36, 39F
文章代碼(AID): #1Mf4r0Sk (C_and_CPP)