关于指针的强制转化之一(基类有虚…

   

#include <iostream>
using namespace std;
class INondelegatingUnknown
{
public:
 virtual void  __stdcall  NondelegationQueryInterface(void **ppv) = 0 ;
 virtual void  __stdcall  shiyan() = 0 ;
 virtual void  __stdcall  NondelegationAddRef() = 0;
 virtual void  __stdcall  NondelegationRelease() = 0;
};

class IUnknown
{
public:
 virtual void  __stdcall  QueryInterface(void **ppv) = 0 ;
 virtual void  __stdcall  AddRef() = 0;
 virtual void  __stdcall  Release() = 0;
};

class A:public IUnknown,public INondelegatingUnknown
{
 virtual void  __stdcall  NondelegationQueryInterface(void **ppv)  ;
 virtual void  __stdcall  NondelegationAddRef() ;
 virtual void  __stdcall  NondelegationRelease() ;
 virtual void  __stdcall  QueryInterface(void **ppv)  ;
 virtual void  __stdcall  AddRef();
 virtual void  __stdcall  Release() ;
    virtual void  __stdcall  shiyan() ;
};

void A::QueryInterface(void **ppv)
{
 cout<<"IUnknow's QueryInterface\n";
}
void A::AddRef()
{
 cout<<"IUnknown' AddRef\n";
}


void A::Release()
{
 cout<<"IUnknow's Release\n";
}

void A::NondelegationAddRef()
{
 cout<<"NondelegationIUnknown' AddRef\n";
 cout<<"good!\n";
}

void A::NondelegationQueryInterface(void **ppv)
{
 cout<<"NondelegationIUnknow's QueryInterface\n";
 cout<<"good!\n";
}

void A::NondelegationRelease()
{
 cout<<"NondelegationIUnknow's Release\n";
 cout<<"very good!\n";
}

void A::shiyan()
{
 cout<<"shiyan"<<endl;
}

void main()
{
    A a;
 void** p=0;
 cout<<&a<<endl; 
 cout<<(IUnknown*)(&a)<<endl;
 cout<<(INondelegatingUnknown*)(&a)<<endl;
 cout<<(IUnknown*)(INondelegatingUnknown*)(&a)<<endl;
    ((INondelegatingUnknown*)(&a))->NondelegationAddRef();
 ((INondelegatingUnknown*)(&a))->NondelegationQueryInterface(p);
    ((INondelegatingUnknown*)(&a))->NondelegationRelease();
    ((IUnknown*)(INondelegatingUnknown*)(&a))->AddRef();
  ((IUnknown*)(INondelegatingUnknown*)(&a))->QueryInterface(p);
     ((IUnknown*)(INondelegatingUnknown*)(&a))->Release();
 cout<<&a<<endl;
 cout<<(A*)(INondelegatingUnknown*)(&a)<<endl;

}

运行结果:

0012FF78   //this指针的值
0012FF78   //第一个基类的虚函数表的指针
0012FF7C   //第二个基类的虚函数表的指针
0012FF7C   //不相干的指针转化没有意义
NondelegationIUnknown' AddRef
good!
NondelegationIUnknow's QueryInterface
good!
NondelegationIUnknow's Release
very good!
shiyan  //值得注意,因为shiyan在INondelegatingUnknown是第二个函数
NondelegationIUnknow's QueryInterface
good!
NondelegationIUnknown' AddRef 
good!
0012FF78
0012FF78 //this指针的值

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值