关于指针的强制转化之一(基类有虚…
2014-02-24 15:02
183 查看
#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指针的值
相关文章推荐
- 关于指针的强制转化之一(基类没有…
- 关于基类与派生类之间对象、指针等转化关系的小结
- 关于基类与派生类之间对象、指针等转化关系的小结
- 关于基类与派生类之间指针转化关系小结
- 类指针强制转化有可能引起内存泄漏
- 关于基类、派生类、对象、指针和虚函数、多态、 静态绑定、 动态绑定 纯虚函数、抽象类
- C++ 派生类指针强制指向基类对象
- 关于强制转化后的风险
- 何时一个类的指针可以强制转化为另外一个类的指针,即使它们之间没有派生关系?
- 关于基类和派生类之间的指针混合的思考
- C++关于基类指针指向子类对象的问题
- 关于char[]数组,char*指针,std::string*之间的转化
- 指针加减与地址强制转化
- 指针强制转化(很有用的小技巧)
- 关于指针类型转化后在printf输出的问题
- 关于c++中字符串和字符指针之间的转化
- 使用dynamic_cast强制将基类指针转换成子类指针
- 打卡23:void * 指针---强制指针转化
- 关于通过不含虚析构函数的基类类型的指针删除派生类对象的问题
- 关于孙鑫MFC视频第三章中this指针指向基类还是派生类的测试程序