精華區beta Programming 關於我們 聯絡資訊
> 書中的範例是: > class X > { > public: > rotate() {X's version of rotate} > }; > class Z: public X > { > public: > rotate() { Z's version of rotate } > }; > Z z; > X datum; > X *pointer = &z; > X &reference = z; > (*pointer).rotate(); 作者應該寫的沒有錯(我也覺得是這樣) 原因是 child 可以由 parent 的 class 所接受(point) 所以基本上的值還是 child 的值.. 而上面的情況我覺得是 overwriting 當然要是 X 中沒有 rotate 的話 pointer 就不會有這個 member function 了 > 或至少,(*pointer)應該先被執行,而(*pointer)的型別應該是 X。所以 > (*pointer).rotate() 應該 invoke X::rotate()。 如上面回答的 child 可被 parent 接受 > 或者我該問,rotate()到底是不是virtual member function? 我比較喜歡 virtual 的定義是個空 function 所以這裡我認為只是 overwriting 當然可能硬說 virtual member function 我想也沒有錯. > 這樣說對嗎?還是C++ Spec裡面有別的規定?請不吝指教… -- │ o ¯\ []----- ║ ║╭══╮ ║ ╭══╮ │ o ▅▇▇▇▆▅▄===============0 ╠══╣╠══╣ ║ ╠══╣ ▊◤︻─︻─︻─︻─︻─︻─︻─︻─︻◥█◣╰╮I am bashful..╰═════ (◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎) ║ and i always feel sad... ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ╭╯ 誰來找我哈拉呀 !!!!! -- * Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3> > -------------------------------------------------------------------------- < 發信人: EightCloud.bbs@csie.nctu.edu.tw (嵐雲), 看板: Programming 標 題: Re: 深度探索C++物件模型,P.26 發信站: 交大資工鳳凰城資訊站 (Thu Dec 17 09:02:25 1998) 轉信站: Ptt!news.ntu!ctu-gate!news.nctu!news.ee.nctu!alab03.ee.nctu!news.csie. ==> 在 Hala.bbs@cis.nctu.edu.tw (滿足現況...:P) 的文章中提到: : > Z z; : > X datum; : > X *pointer = &z; : > X &reference = z; : > (*pointer).rotate(); : 作者應該寫的沒有錯(我也覺得是這樣) ............ : pointer 就不會有這個 member function 了 : > 或至少,(*pointer)應該先被執行,而(*pointer)的型別應該是 X。所以 : > (*pointer).rotate() 應該 invoke X::rotate()。 有疑問, 寫個程式去測測看不就知道了... (改個幾行程式....) 不是 virtual funcition, 執行的是 X::rotate, 是 virtual function, 則執行的是 Z::rotate : 如上面回答的 child 可被 parent 接受 : > 或者我該問,rotate()到底是不是virtual member function? : 我比較喜歡 virtual 的定義是個空 function ......................... 你到底在寫什麼啊? : 所以這裡我認為只是 overwriting : 當然可能硬說 virtual member function 我想也沒有錯. -- 受不了