类中虚函数对应的表指针在类里是成员还是类符带的空间呢?

迷途的书童 2008-11-01 05:25:48
类中对应于虚函数,是在类中有一个表指针指向虚函数的地址:

想问一下这个指针是类的成员吗?还是类里面的某个东西?

不是很清楚,希望各位大大回答一下,谢谢!
...全文
159 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
迷途的书童 2008-11-03
  • 打赏
  • 举报
回复
谢谢!
lann64 2008-11-02
  • 打赏
  • 举报
回复 1
[Quote=引用 6 楼 GUANYIJUN123 的回复:]
是阿,就是这里有点想不通!
[/Quote]
这种技术在各类程序里是常用的技术了,怎么想不通了?
先看看别的东西,1、基类里的private成员,在派生类里是不是也存在呢?显然是的,但是派生类不能直接访问它。
2、操作系统内部使用的一些变量和函数,在你使用的系统下,是不是也存在呢?显然使得,但是作为用户你不能直接访问它们。

好了,回来看虚函数表指针。显然,这个指针是跟对象在一起保存的,说是对象的一部分也没错,在对象内存布局里也实实在在占据了空间。但是这个东西是专门跟系统运行时使用的,不希望用户来直接访问。因此对用户进行了隐藏处理。如果是数据成员,无论是哪种标签属性(即使是private),用户总是可以访问到,所以它不能是数据成员。可以理解成系统在对象上附上了一个“补丁”,里面带着系统运行时需要的信息,这个“补丁”是实实在在存在的,但用户不能直接访问它,从用户角度看,这个是透明不可见的东西,当然也就不是类里的成分了。
至于采取特殊手段来访问这个东西,是要付出成本的。这个是编译器相关的,采用了手段,不仅不能保证移植性,而且,编译器版本升级后也不保证手段还有效。

类似的东西,系统里还有很多,有兴趣看看new实现。
迷途的书童 2008-11-02
  • 打赏
  • 举报
回复
是阿,就是这里有点想不通!
beiyang9 2008-11-01
  • 打赏
  • 举报
回复
为什么不属于数据成员呢,既然占有对象内存,那就该是对象一部分呀?只是我的理解。
weiyijiji 2008-11-01
  • 打赏
  • 举报
回复
你可以理解为成员指针变量,因为它是存在于类对象的内存布局中.但是跟普通成员不同,它没有访问权限,可以间接找到它来调用函数
baihacker 2008-11-01
  • 打赏
  • 举报
回复
都不属于.

仅仅是编译器为实现某些功能,加的东西.

就像引用一样,一般说来会用一个指针来实现.
迷途的书童 2008-11-01
  • 打赏
  • 举报
回复
这个我理解,我只是想知道这个指针在类里究竟是什么身份!

属于成员指针变量啊?或类的成员函数啊?或是什么,有没有相关的说法呢?

谢谢!
baihacker 2008-11-01
  • 打赏
  • 举报
回复
编译器按插的一个指针,你不可以主动访问.
但是可以通过一些手段修改.

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧