Re: [分享] c++ virtual function table

看板C_and_CPP (C/C++)作者 (今天天氣好)時間13年前 (2012/10/15 17:32), 編輯推噓1(103)
留言4則, 4人參與, 最新討論串2/4 (看更多)
※ 引述《descent (返無)》之銘言: : 研究 c++ runtime 之後, 我才瞭解 c++ compiler 的邪惡, : 它為了我們的程式碼插了很多額外的 code, 令人又愛又恨。 : 在大部份狀況下, 我們不用管這些事情, 搞懂這些東西對我來說純粹是個機緣。 : 有點中毒, 愈挖愈深。 : 建議先看這篇: C++ 虛函數表解析 : http://blog.csdn.net/haoel/article/details/1948051 : 這篇則是我反組譯後分析 virtual function table : http://descent-incoming.blogspot.tw/2012/09/c-virtual-function-table.html : 有任何錯誤還請各位朋友指證。 感謝原PO的分享,順著這篇我也將我的問題提出來問看看 這是OpenCV中的cap_dshow.cpp一小部份http://tinyurl.com/9lkrfdc class CvCaptureCAM_DShow : public CvCapture { public: CvCaptureCAM_DShow(); virtual ~CvCaptureCAM_DShow(); virtual bool open( int index ); virtual void close(); virtual double getProperty(int); virtual bool setProperty(int, double); virtual bool grabFrame(); virtual IplImage* retrieveFrame(int); virtual int getCaptureDomain(); protected: void init(); int index, width, height,fourcc; IplImage* frame; static videoInput VI; }; ^^^^^^^^^^^^^ //-------------------------------------------------- class videoInput{ public: videoInput(); ~videoInput(); ........其他的函式 }; http://tinyurl.com/8uemmun //-------------------------------------------------- 就PO所提的,這些Virtual Function最後都會做成Virtual Table 要呼叫的時候就到這個表格找函式的位置,然後再跳過去執行 只是現在我想要找出protected變數videoInput VI;的位置 因為我要藉由vi的位置來呼叫videoInput的函式 我原本天真的以為變數也會有類似的表可以查詢 但我google找了好久都只有提到function有表可以查 卻都沒提到變數的部份是怎麼安排的 請問各位網友這樣的問題有解嗎 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.164.232.143

10/15 17:47, , 1F
用函數包? virtual videoInput &getVI(){return VI;}
10/15 17:47, 1F

10/15 18:13, , 2F
多了vtbl這層是為了要改寫函式位址, 沒改寫需求為什麼要表?
10/15 18:13, 2F

10/15 19:20, , 3F
看不懂你的需求
10/15 19:20, 3F

10/15 21:43, , 4F
變數在 vtable 中一樣是變數, function 才是 pointer.
10/15 21:43, 4F
文章代碼(AID): #1GUzX84o (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1GUzX84o (C_and_CPP)