煮酒论坛

 找回密码
 申请新用户
搜索
热搜: 活动 交友 discuz
查看: 4028|回复: 4

讨论一下

[复制链接]
发表于 2002-12-19 19:43:22 | 显示全部楼层 |阅读模式
“成员指针不是真正的指针。传统意义上的指针是一个整数,保存指向某个变量或函数的地址。成员指针则是一个复合数据结构,包含有若干个数据成员。”

    为什么?

    是由于成员指针增加了对成员函数参数是否正确、是否是常量成员函数这些信息的要求。它与只需要一个简单地址的各种指针有所不同。

   如:
     int *p;
       float *fla;
   
      将p、fla赋给确定的值,编译程序将读取指定4个字节(int)、8个字节(float)内存。
   
    函数指针同样的道理,它将指向指定的函数。

    而成员函数呢?按此文的观点,

    http://www.watch-life.net/developer/list.asp?id=25

      它必须确定成员指针是否匹配!

    大家的意见呢?

发表于 2002-12-26 10:07:02 | 显示全部楼层
苏飞,我没有明白你觉得那里需要进一步解释呢?
 楼主| 发表于 2002-12-26 17:21:44 | 显示全部楼层
先说明一下,是我弄错了,我先以为普通函数指针与成员函数指针有很大的不同,:)普通函数指针与成员函数指针基本上相同。

可是难道指向普通函数的指针的是一个整数,而指向成员函数的指针就不是一个整数而是一个结构?那是为什么?为什么是一个结构?

我们知道C++是允许函数名相同的(C语言不允许),特定的函数地址入口不是固定的吗?

既然我们能够通过一个地址确定普通函数的入口,为什么在成员指针中却不能实现而需要一个结构呢?

希望XJB兄给解释一下,:)

发表于 2002-12-30 17:51:20 | 显示全部楼层
其实,我个人觉得,说“成员函数的指针”只是一种形象的说法。其实,指针就是指针,归根到底是地址!为什么说是“结构”呢?
1、保存其对象的指针信息,需要绑定对象(所以叫成员函数指针)
2、本身的入口地址。
3、特定的函数地址是固定的,重载的每个函数地址是不同的。
虽然地址确定,但是如果这个成员要是没有他所属对象的值,那么当成员改变了某个对象的属性时,这时首先这个对象不知道其属性有没有被修改,如果是多个对象时,根本就不知道修改了哪个对象的属性,所以这个时候的对象信息还是需要的
4、C++是允许函数名相同的?
其实是不准的。只不过C++把函数参数表都编进函数名里了



[此贴子已经被作者于2002-12-30 17:52:52编辑过]

 楼主| 发表于 2003-1-3 15:17:14 | 显示全部楼层
嗯,你是说,认为普通函数指针是一个整数地址是一种说法。实际上在C/C++中它们都是一个结构?

这取决于实现,具体的实现?

嗯,理由够充分的。我暂时只能表示同意。

呵呵,我是不是太钻牛角尖了?
您需要登录后才可以回帖 登录 | 申请新用户

本版积分规则

小黑屋|手机版|Archiver|守望轩 ( 湘ICP备17013730号-2 )|网站地图

GMT+8, 2018-11-18 16:52 , Processed in 0.037591 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表