社区
C语言
帖子详情
如何能访问一个对象的vptr啊
szlbyou
2002-02-02 12:59:53
例:
class test{
public:
test(){...}
virtual ~test(){...}
private:
...
};
如何能访问一个对象的vptr,能访问吗?
...全文
84
4
打赏
收藏
如何能访问一个对象的vptr啊
例: class test{ public: test(){...} virtual ~test(){...} private: ... }; 如何能访问一个对象的vptr,能访问吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
LLnju
2002-02-02
打赏
举报
回复
下面的测试在 VC上通过:
#include <windows.h>
#include <iostream>
#include <vector>
using namespace std;
struct testVtbl
{
int a , b;
virtual void __cdecl show() const
{
cout << a << " " << b << endl;
}
virtual void __cdecl showB() const
{
cout << b << " " << a << endl;
}
virtual void __cdecl showInfo( const char* inf ) const
{
cout << inf << endl;
}
};
typedef void (__cdecl * pFun )( const testVtbl* pThis );
typedef void (__cdecl * pFun2 )( const testVtbl* pThis , const char* inf );
void main()
{
testVtbl tv;
testVtbl* ptv = &tv;
tv.a = 100; tv.b = 10000;
pFun* __pvfptr = reinterpret_cast<pFun**>( ptv )[0];
pFun pp = __pvfptr[0];
pp( ptv );
pp = __pvfptr[1];
pp( ptv );
pFun2 pp2 = reinterpret_cast<pFun2*>(__pvfptr)[2];
pp2( ptv , "this is a test" );
}
hz129
2002-02-02
打赏
举报
回复
只要知道它的存在就行了,何必要访问它?
每个编译器中它所存放的位置都可能不一样,即使访问了也没有移植性可言,根本毫无意义的
liu_feng_fly
2002-02-02
打赏
举报
回复
有必要访问他吗?何必研究这种无聊问题呢
szlbyou
2002-02-02
打赏
举报
回复
请各位赐教!
关于
vptr
(虚指针)和vtbl(虚函数表)1
2.静态绑定与动态绑定在C中,对于不同的函数名采用静态绑定的方法,每个函数直接对应了
一个
地址,存储在相应的位置中。需要注意的是,new和delete操作应该是静
面向
对象
中函数的联编机制
介绍有关面向
对象
的性质,包括函数联编,接口,多态性的介绍
C++虚函数多态的工作原理
讲得非常清楚,值得学习,当年我怎么看怎么不懂,现在看了这个我就懂了
探索MinGW是如何存储
对象
、如何实现类继承、多态
探索MinGW是如何存储
对象
、如何实现类继承、多态。
对象
,继承,多态是面向
对象
编程语言中的一些概念,MinGW只是
一个
编译环境,它可以编译 C++ 程序,C++是
一个
面向
对象
的编程语言,所以比较正确的说法是 “C++是如何存储
对象
、如何实现类继承、多态“
C++类继承内存布局文档打包
C++类继承内存布局文档打包
C语言
70,033
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章