[問題] super 關鍵字

看板C_and_CPP (C/C++)作者 (最愛朴素妍)時間15年前 (2010/11/17 00:38), 編輯推噓11(1109)
留言20則, 5人參與, 最新討論串1/1
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

11/17 01:02, , 1F
第一次看是要花點時間,我還是比較習慣原本寫法
11/17 01:02, 1F

11/17 01:03, , 2F
不過在BBS畫UML類別圖,還蠻厲害的...
11/17 01:03, 2F
也沒多厲害啦~ 直接看程式碼應該會蠻混亂的吧? 畢竟 寫那麼醜.. 所以就先畫圖囉! :)

11/17 01:29, , 3F
請教這種寫法叫做甚麼啊? 看不懂...
11/17 01:29, 3F

11/17 01:31, , 4F
是傳說中的metaprogramming嗎?
11/17 01:31, 4F
這個還不是啦 XD 先建立一個class template, 在具現化時括號裡填什麼 , 它就把那個型態定義新的別名叫做 super, 而且這個 別名可以被繼承、隱藏, 就不用每次寫新類別都要自己 加 typedef 啦!

11/17 01:40, , 5F
目前真的看不懂一開始的template是幹嘛用的@@
11/17 01:40, 5F

11/17 01:40, , 6F
好特殊 這樣下面就可以用extend這個字....
11/17 01:40, 6F

11/17 01:43, , 7F
struct extends : Base 這:Base也不知道是甚麼意思....
11/17 01:43, 7F

11/17 01:43, , 8F
看來我只看得懂最淺的template了orz
11/17 01:43, 8F
那個是一個型態~ template <typename Base>, 是可以 被替換掉的, 譬如把 Grandpa 代進去會得到 //┌ 這裡指繼承, struct 預設用 public //↓ class 預設是用 private struct extends<Grandpa> : Grandpa { protected: typedef Grandpa super; }; 這個類別會幫我們作好 typedef的動作, 如果我們想要 這個別名, 就繼承它!(且也已經幫我們繼承了Grandpa)

11/17 01:52, , 9F
我認知比較寬鬆,看到角括號< >就代表內含的程式碼被當成
11/17 01:52, 9F

11/17 01:53, , 10F
資料,送去樣板構築出新的程式碼,用到樣板就算metaprogr.
11/17 01:53, 10F

11/17 02:00, , 11F
要有遞迴的觀念才算metaprogramming吧
11/17 02:00, 11F
就我的認知上metaprogramming是「用程式來寫程式」, 而維基上對 template mataprogramming 的定義如下 http://ppt.cc/MxNz

11/17 02:03, , 12F
可能我搞錯; http://codepad.org/5pCxc6cG 人工展開版
11/17 02:03, 12F
樓上 XDD ※ 編輯: loveme00835 來自: 140.121.197.115 (11/17 02:14)

11/17 06:47, , 13F
50行程式很難看出哪裡難讀
11/17 06:47, 13F

11/17 21:02, , 14F
請問一下 : 不用寫public字眼 是 struct特有的寫法嗎?
11/17 21:02, 14F

11/17 21:05, , 15F
它預設就是public
11/17 21:05, 15F

11/17 21:05, , 16F
原來預設 不是只有 針對{public:不寫也是預設public呀@@}
11/17 21:05, 16F

11/19 06:09, , 17F
咦?所以struct的繼承預設是public?
11/19 06:09, 17F

11/19 06:09, , 18F
然後class的繼承預設是private?
11/19 06:09, 18F

11/19 06:10, , 19F
我以為那個只有對member functions或variables…的關係…
11/19 06:10, 19F

11/19 06:40, , 20F
class跟struct在C++其實是一樣的東西
11/19 06:40, 20F
文章代碼(AID): #1CuhE4LQ (C_and_CPP)
文章代碼(AID): #1CuhE4LQ (C_and_CPP)