看板 C_and_CPP 關於我們 聯絡資訊
class Employee{ public: print() {//do Employee method} }; class Hourlyworker:public Employee{ public: print() {//do Hourworker method} }; Employeee e, *ePtr=&e; Hourlyworker h,*hPtr=&h; ePtr->print();//do Employee method hPtr->print();//do Hourworker method ePtr=&h; ePtr->print();//do Employee method 黃色部分 若將print 改成 virtual function 便會do Hourlyworker method 教科書上也 說這是因為使用virtual function會去call vtable的關係object model 如同下列layout http://www.geeksforgeeks.org/wp-content/uploads/virtualFuns1.png
到這裡小弟可理解 但是小弟想請教若無使用virtual function 時 黃色部分的 ePtr object model layout會是什麼樣子?ePtr已point &h它是如何call到do Employee method -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.255.9.13 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1508721853.A.488.html ※ 編輯: gecer (111.255.9.13), 10/23/2017 09:24:50 ※ 編輯: gecer (111.255.9.13), 10/23/2017 09:25:56 ※ 編輯: gecer (111.255.9.13), 10/23/2017 09:26:29
PkmX: 你寫的syntax是C++嗎...? 10/23 09:41
PkmX: 基本上你可以想像成會有一個non-member function第一個參數 10/23 09:42
PkmX: 就是this 10/23 09:42
LPH66: 原 PO 你是否之前是寫 java 的? 10/23 09:49
LPH66: 你的 class 語法看起來很像 java, 但 java 沒有寫 * 的指標 10/23 09:49
peterwu4: 你的Emplyee和Hourlyworker應該有繼承的關係,不然指標 10/23 15:17
peterwu4: 會給不過去;另外,繼承的話不是virtual同名同參數就當 10/23 15:18
peterwu4: 作被蓋掉了吧~ 10/23 15:18
修改成c++語法 ※ 編輯: gecer (111.255.9.13), 10/23/2017 20:00:57
james732: 沒有virtual的話,就直接呼叫ePtr類別的print而已 10/23 20:20
james732: ePtr->print() 會相當於 Employee::print(ePtr) 10/23 20:21
james732: 而不會管你指標實際是指向什麼,也不會有查表的動作 10/23 20:21