// project100.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。
//#include
"pch.h"
#include
using
namespace std;
//基類1
class
base1
virtual
voidg(
)};//基類2
class
base2
virtual
voidi(
)};//子類
class
derived
:public base1,
public base2
virtual
voidi(
)//覆蓋父類2的虛函式
//如下三個我們自己的虛函式
virtual
voidmh(
)virtual
voidmi(
)virtual
voidmj(
)};int
main()
func f2 =
(func)vptr1[1]
;//0x00ab15f0
func f3 =
(func)vptr1[2]
;//0x00ab15cd
func f4 =
(func)vptr1[3]
;//0x00ab15ff
func f5 =
(func)vptr1[4]
;//0x00ab15eb
func f6 =
(func)vptr1[5]
;//非正常
func f7 =
(func)vptr1[6]
; func f8 =
(func)vptr1[7]
; func f11 =
(func)vptr2[0]
;//0x00ab15af
func f22 =
(func)vptr2[1]
;//0x00ab15b9
func f33 =
(func)vptr2[2]
;//非正常
func f44 =
(func)vptr2[3]
; b1.f(
);b2.i(
);d.f()
; d.i(
);d.mh()
; d.g(
);//----------------
cout <<
"-----------------"
<< endl;f1(
);f2(
);f3(
);f4(
);f5(
);cout <<
"-------------"
<< endl;
f11();
f22();
//第五節 輔助工具,vptr、vtbl建立時機
// cl /d1 reportsingleclasslayoutderived project100.cpp
// g++ -fdump-class-hierarchy -fsyntax-only 3_4.cpp
//vptr(虛函式表指標)什麼時候建立出來的?
//vptr跟著物件走,所以物件什麼時候建立出來,vptr就什麼時候建立出來。執行的時候;
//實際上,對於這種有虛函式的類,在編譯的時候,編譯器會往相關的建構函式中增加
//為vptr賦值的**,這是在編譯期間編譯器為建構函式增加的。
//這屬於編譯器默默為我們做的事,我們並不清楚。
//當程式執行的時候,遇到建立物件的**,執行物件的建構函式,那麼這個建構函式裡有
//給物件的vptr(成員變數)賦值的語句,自然這個物件的vptr就被賦值了;
//虛函式表是什麼時候建立的?
//實際上,虛函式表是編譯器在編譯期間(不是執行期間)就為每個類確定好了對應的虛函式表vtbl的內容。
//然後也是在編譯器期間在相應的類建構函式中新增給vptr賦值的**,這樣程式執行的時候,
//當執行到成成類物件的**時,會呼叫類的建構函式,執行到類的構造
//函式中的 給vptr賦值的**,這樣這個類物件的vptr(虛函式表指標)就有值了;
NK bin 輔助工具
有時候需要簡單的檢視一下nk.bin ce rom 中的檔案,就需要小工具,這些工具在wince sdk中有很多,下面簡單介紹幾個 viewbin.exe 顯示bin檔案中的內容 displays information about the contents of a run time image....
LINQ to SQL 輔助工具
當你在專案中使用linq to sql的時候,有乙個事情是必須要非常注意的,那就是要關心一下linq to sql幫你生成的sql語句,尤其在你還不是非常熟悉linq to sql的語法,api的時候,這點是非常重要的。一 datacontext本身有提供log屬性來將linq to sql生成的s...
JUC 輔助工具類
countdownlatch 假設這樣的乙個場景 你是圖書館管理員 現在還有五個人在圖書館中怎麼保證五個人都走完的時候進行鎖門 cyclicbarrier 鎖完門 下了班 你邀請一些朋友一起吃飯 有人提早就到 有人會準點到只有人齊了才開始吃飯 cyclicbarrier 和 countdownlat...