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

很久没有在学习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[i].*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[i].*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型的指定成员的所有数据的值。

给我的感觉,数据成员的指针有点像继承中的多肽,是一个动态绑定的过程。在函数定义的时候,是不知道需要累加的对象的,而只是知道成员的类型。而在调用的时候才会去指定具体是哪个成员。

不知道我的理解是否有偏差,希望路过的大牛们给予指点,大家共同进步,呵呵!

原文链接: https://www.cnblogs.com/malloc/archive/2010/04/22/1717890.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/10253

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月6日 下午11:25
下一篇 2023年2月6日 下午11:28

相关推荐