看板 C_and_CPP 關於我們 聯絡資訊
Java/C# 寫多了, 常常寫 C++的時候會很直覺把 methods實 作直接 key在類別定義裡, 然後就會想說為了省打字時間, 也弄一個 super來用, 所以就搞出了下面這個東西 template <typename Base> struct extends : Base { protected: typedef Base super; }; 為了測試他, 作了一個繼承體系 : ┌──────────┐ │ Grandpa │ ├──────────┤ │+ sayHello() : void │ └──────────┘ △ │ ┌──────────┐ │ Father │ ├──────────┤ │+ sayHello() : void │ └──────────┘ △ │ ┌──────────┐ │ Son │ ├──────────┤ │+ sayHello() : void │ └──────────┘ 程式碼 : http://codepad.org/JQcadLw9 其實中間還加了兩層為了定義 super多出來的類別, 想問一 下大家, 這樣會不會造成閱讀不良? 還是有人跟我一樣覺得 這樣不錯用? XD 備註 : 只適合單繼承 -- ◢████ ◢█ ◢██◣ ◢█ ◢███ ◢█ T-ara版怎麼去 ████◢█████s ~> T-ara ███ █ ◢█歡迎您的光臨 ███████████恩靜智妍孝敏 ███ ██ 素妍居麗寶藍 ████◥██◤ █████ψmakigoto123 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115
purpose:第一次看是要花點時間,我還是比較習慣原本寫法 11/17 01:02
purpose:不過在BBS畫UML類別圖,還蠻厲害的... 11/17 01:03
也沒多厲害啦~ 直接看程式碼應該會蠻混亂的吧? 畢竟 寫那麼醜.. 所以就先畫圖囉! :)
QQ29:請教這種寫法叫做甚麼啊? 看不懂... 11/17 01:29
QQ29:是傳說中的metaprogramming嗎? 11/17 01:31
這個還不是啦 XD 先建立一個class template, 在具現化時括號裡填什麼 , 它就把那個型態定義新的別名叫做 super, 而且這個 別名可以被繼承、隱藏, 就不用每次寫新類別都要自己 加 typedef 啦!
QQ29:目前真的看不懂一開始的template是幹嘛用的@@ 11/17 01:40
QQ29:好特殊 這樣下面就可以用extend這個字.... 11/17 01:40
QQ29:struct extends : Base 這:Base也不知道是甚麼意思.... 11/17 01:43
QQ29:看來我只看得懂最淺的template了orz 11/17 01:43
那個是一個型態~ template <typename Base>, 是可以 被替換掉的, 譬如把 Grandpa 代進去會得到 //┌ 這裡指繼承, struct 預設用 public //↓ class 預設是用 private struct extends<Grandpa> : Grandpa { protected: typedef Grandpa super; }; 這個類別會幫我們作好 typedef的動作, 如果我們想要 這個別名, 就繼承它!(且也已經幫我們繼承了Grandpa)
purpose:我認知比較寬鬆,看到角括號< >就代表內含的程式碼被當成 11/17 01:52
purpose:資料,送去樣板構築出新的程式碼,用到樣板就算metaprogr. 11/17 01:53
loveflames:要有遞迴的觀念才算metaprogramming吧 11/17 02:00
就我的認知上metaprogramming是「用程式來寫程式」, 而維基上對 template mataprogramming 的定義如下 http://ppt.cc/MxNz
purpose:可能我搞錯; http://codepad.org/5pCxc6cG 人工展開版 11/17 02:03
樓上 XDD ※ 編輯: loveme00835 來自: 140.121.197.115 (11/17 02:14)
yauhh:50行程式很難看出哪裡難讀 11/17 06:47
QQ29:請問一下 : 不用寫public字眼 是 struct特有的寫法嗎? 11/17 21:02
loveflames:它預設就是public 11/17 21:05
QQ29:原來預設 不是只有 針對{public:不寫也是預設public呀@@} 11/17 21:05
aecho:咦?所以struct的繼承預設是public? 11/19 06:09
aecho:然後class的繼承預設是private? 11/19 06:09
aecho:我以為那個只有對member functions或variables…的關係… 11/19 06:10
loveflames:class跟struct在C++其實是一樣的東西 11/19 06:40