看流星社区

 找回密码
 注册账号
查看: 2472|回复: 0

C++指针之数据成员指针

[复制链接]

该用户从未签到

发表于 2011-3-11 11:01:56 | 显示全部楼层 |阅读模式
很久没有在学习C++了,以前掌握的东西,现在也忘记的差不多了,偶尔想起了一些,顺便就记下来吧,省的我下次再想到的时候,又要纠结老半天才能想起来。
  C++指针,我觉得应该可以分为两类:数据指针和函数指针。其中,数据指针也包括两类:普通数据指针和成员数据指针;函数指针也包括普通函数指针和成员函数指针。在学习C++的过程中,首先接触到的指针问题,大多是普通的数据指针,这一类指针是应用的很多的指针也是相比较之下,比较容易的一个。当然,这个比较容易的本身,就已经是一个“很难”的东西了。我自己也没有真正的可以把指针玩的很溜。也就是学一点记一点,收集的多了,自然就知道的多了。练习的多了,自然也就熟悉的多了。

  言归正传,首先给出一个关于数据成员指针的例子吧:
  1: #include "stdafx.h"
  2: #include"Father.h"
  3: #include"Child.h"
  4: #include<vector>
  5:
  6: struct Point
  7: {
  8:   int x;
  9:   int y;
  10:   double d;
  11:   double d2;
  12: };
  13:
  14: int Add(Point arr[],int size,int Point::*p)
  15: {
  16:   int sum = 0;
  17:   for(int i = 0;i < size;i++)
  18:   {
  19:     sum += arr.*p;
  20:   }
  21:   return sum;
  22: }
  23:
  24: double Add1(Point arr[],int size,double Point::*p)
  25: {
  26:   double sum = 0;
  27:   for(int i = 0;i < size;i++)
  28:   {
  29:     sum += arr.*p;
  30:   }
  31:   return sum;
  32: }
  33:
  34: int _tmain(int argc, _TCHAR* argv[])
  35: {
  36:   Point pp[3]={{1,2,1.0,2.0},{3,4,1.0,2.0},{5,6,1.0,2.0}};
  37:
  38:   cout<<Add(pp,3,&Point::x)<<endl;
  39:   cout<<Add(pp,3,&Point::y)<<endl;
  40:
  41:   cout<<Add1(pp,3,&Point::d)<<endl;
  42:   cout<<Add1(pp,3,&Point::d2)<<endl;
  43:   system("pause");
  44:   return 0;
  45: }

  这段程序执行了很简单的功能。首先Point结构有四个数据成员,Add函数累加了Point中的int型的指定成员所有数据的值。Add2函数累加了Point中的double型的指定成员的所有数据的值。
  给我的感觉,数据成员的指针有点像继承中的多肽,是一个动态绑定的过程。在函数定义的时候,是不知道需要累加的对象的,而只是知道成员的类型。而在调用的时候才会去指定具体是哪个成员。
  不知道我的理解是否有偏差,希望路过的大牛们给予指点,大家共同进步,呵呵!
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-23 21:00

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

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