關於指標的強制轉化之一(基類有虛

2021-06-20 15:13:18 字數 1426 閱讀 8765

#include

using namespace std;

class inondelegatingunknown

;class iunknown;

class a:public iunknown,public inondelegatingunknown;

void a::queryinte***ce(void **ppv)

void a::addref()

void a::release()

void a::nondelegationaddref()

void a::nondelegationqueryinte***ce(void **ppv)

void a::nondelegationrelease()

void a::shiyan()

{cout<<"shiyan"{ a a;

void** p=0;

cout<<&a<

cout<<(iunknown*)(&a)((inondelegatingunknown*)(&a))->nondelegationaddref();

((inondelegatingunknown*)(&a))->nondelegationqueryinte***ce(p);

((inondelegatingunknown*)(&a))->nondelegationrelease();

((iunknown*)(inondelegatingunknown*)(&a))->addref();

((iunknown*)(inondelegatingunknown*)(&a))->queryinte***ce(p);

((iunknown*)(inondelegatingunknown*)(&a))->release();

cout<<&a0012ff78 

//this指標的值

0012ff78 

//第乙個基類的虛函式表的指標

0012ff7c 

//第二個基類的虛函式表的指標

0012ff7c 

//不相干的指標轉化沒有意義

nondelegationiunknown' addref

good!

nondelegationiunknow's queryinte***ce

good!

nondelegationiunknow's release

very good!

shiyan  //值得注意,因為shiyan在inondelegatingunknown是第二個函式

nondelegationiunknow's queryinte***ce

good!

nondelegationiunknown' addref 

good!

0012ff78

0012ff78 //this指標的值

有虛繼承的類其有幾個虛繼承的基類則該類就有幾個虛表

對於下面的測試 64位系統 c類繼承了a b 均為虛類,所以在結果中sizeof c 結果為32 include using namespace std class a private int a class b float b class c public a public b static do...

純虛函式與基類指標陣列的應用

題目內容 定義抽象基類shape,其中純虛函式printname 輸出幾何圖形的名稱和相應的成員資料 純虛函式printarea 計算幾何圖形的面積。並由shape類派生出5個派生類 circle 圓形 資料成員為半徑 square 正方形 資料成員為邊長 rectangle 長方形 資料成員為長和...

純虛函式與基類指標陣列的應用

使用虛函式是實現動態聯編的基礎。正確使用虛函式,需要滿足下列條件 1 具有符合型別相容規則的公有派生類層次結構。2 在派生類中重新定義基類的虛函式,對其進行覆蓋。3 通過基類指標或基類引用訪問虛函式。1 題目內容 定義抽象基類shape,其中純虛函式printname 輸出幾何圖形的名稱和相應的成員...