zoukankan      html  css  js  c++  java
  • 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型的指定成员的所有数据的值。

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

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

  • 相关阅读:
    Linux系统调用
    Kubernetes 中强化tab 功能
    Docker镜像构建之案例分享
    网络基础之名词介绍
    网络基础协议之UDP(下篇)
    网络基础协议之UDP(上篇)
    内核升级
    尼恩 Java高并发三部曲 [官方]
    CDN图解(秒懂
    DNS图解(秒懂
  • 原文地址:https://www.cnblogs.com/malloc/p/1717890.html
Copyright © 2011-2022 走看看