指向类成员函数的指针其实并非指针

原创 2016年06月01日 12:21:06

  1. 与常规指针不同,一个指向成员的指针并不指向一个具体的内存位置,它指向的是一个类的特定成员,而不是指向特定对象里的特定成员。通常最清晰的做法是将指向数据成员的指针看做一个偏移量。这个偏移量告诉你,一个特定成员的位置距离对象的起点有多少个字节。
   2. 给定一个成员在类内的偏移量,为了访问位于那个偏移量的数据成员,我们需要该类的一个对象的地址。这时候就需要.和->的操作。pC->*pimC,请求将pC内的地址加上pinC内的偏移量,为的是访问pC所指向的C对象中适当的数据成员。aC.*pimC,请求aC的地址加上pimC中的偏移量,也是为了访问pC所指向的C对象中适当的数据成员。

//------
class C
{
public: 
    //...
    int a_;
};
int C::*pimC; //一个指针,指向C的一个int成员
C aC;
C *pC = &aC;
pimC = &C::a_;
aC.*pimC = 0;
int b = pC->*pimC;
//------

  3. 获取非静态成员函数的地址时,得到的不是一个地址,而是一个指向成员函数的指针。
  4. 为了对一个指向成员函数的指针进行解引用,需要一个对象或一个指向对象的指针。对于指向数据成员的指针的情形,为了访问该成员,需要将对象的地址和成员的偏移量相加。对于指向成员函数的指针额情形,需要将对象的地址用作this指针的值,进行函数调用,以及作为其他用途。
  5. 一个指向成员函数的指针的实现自身必须存储一些信息,诸如它所指向的成员函数是虚拟的还是非虚拟的,到哪里去找到的适当的虚函数表指针等等。
   6. 另外补充一点关于指向内联函数的指针的问题。一个函数指针指向内联函数是合法的。然而,通过函数指针调用+内联函数将不会导致内联式的函数调用,因为编译器无法在编译期精确地确定将会调用什么函数。因此在调用点,编译期别无他法,只好生成间接、非内联的函数调用代码。

版权声明:本文为博主原创文章,未经博主允许不得转载。

指向类成员函数的指针并非指针

参考>的相关章节"指向类成员函数的指针",这个术语中包含了"类成员函数"的术语,但是严格的说,这里的成员函数只是指非静态成员函数,这个术语中还包含了"指针"这个术语,但是严格的说,它即不包含地址,行为...
  • oowgsoo
  • oowgsoo
  • 2007年03月19日 15:59
  • 2126

C++之指向数据成员的指针和指向成员函数的指针

这里指向数据成员的指针和指向成员函数的指针与指向变量的指针和指向函数的指针进行对比来解释,比较好理解一些。指向变量的指针和指向函数的指针先举个例子:void func(int a, int b){ ...
  • maoliran
  • maoliran
  • 2016年06月02日 20:23
  • 1672

如何使用指向类的成员函数的指针(详解!)

我们首先复习一下"指向函数的指针"如何使用?   void print()   {   }   void (*pfun)(); //声明一个指向函数的指针,函数的参数是 void,函数的返回值是 vo...
  • lishuhuakai
  • lishuhuakai
  • 2014年01月14日 22:13
  • 27099

Pointers to Class Members Are Not Pointers(指向类成员函数的“指针”并非指针)

Item 15. Pointers to Class Members Are Not PointersPointers to Class Members:指向类成员的指针注:本条中只涉及到非静态的数据...
  • bical
  • bical
  • 2008年09月18日 15:33
  • 546

内存篇之指向栈的指针

下面程序运行有什么样的结果?     char *GetString(void)     {       char array[6];       strcpy(array, “hello”)...
  • ipmux
  • ipmux
  • 2013年12月25日 09:29
  • 1364

指向类成员函数的指针

转载于:http://blog.csdn.net/jinjinclouded/article/details/5189540 最近在开发中用到了函数指针,于是想整理了一下有关函数指针的概念。O(∩_...
  • oyanghaizhi
  • oyanghaizhi
  • 2013年11月21日 22:44
  • 417

常指针和指向常数的指针

如果const在*左边     ,const   修饰值           int   const   *pi          如果const在*右边     ,const   修饰指针    ...
  • wanghaofeng
  • wanghaofeng
  • 2011年09月29日 15:58
  • 5534

理解指向指针的引用

在做项目时,用到第三方的API:RequestService( string *reqst, string *&Rsp)       怎么来调用这个API呢?由于对指针的使用不熟悉,分别作了如下尝试:...
  • acs713
  • acs713
  • 2013年10月09日 16:11
  • 13709

指向函数的指针(一)

之所以想写一篇函数指针的文章,源于函数指针在C/C++编程中使用的广泛性,而对于一些初级编程者来说对函数指针的使用或许有些迷惑,而一旦在适当的时候使用了函数指针,会使代码简洁有力。本篇介绍的是函数指针...
  • hzyong_c
  • hzyong_c
  • 2012年04月16日 00:08
  • 14267

指向数组的指针

   数组的名字代表了此数组的首地址,对数组再取地址,它的值仍是相同的。        int a[5] = {1,2,3,4,5};  a ,&a  它们的值是相同的对数组取地址,类型可以当做指向此...
  • weixing979
  • weixing979
  • 2007年12月01日 02:52
  • 12669
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指向类成员函数的指针其实并非指针
举报原因:
原因补充:

(最多只允许输入30个字)