• C++ 必知必会:条款15 成员的指针并非指针


    指向类成员的类成员的指针说是“指针”,其实是不合适的,因为他既不包含地址,其行为也不像指针

    常规的指正,包含地址,对其解应用可以得到该指针包含地址所指向的对象

       1:  int a = 12;
       2:  int pi = &a;
       3:  *pi = 0;
       4:  a = *ip;

    但是对于指向类成员的指针不是内存中特定的位置,他指向的是一个类中的特定成员的位置,而不是指向一个特定对象的成员。一般常见的做法是存储一个类成员对象的偏移地址--相对类起始地址的。

       1:  class A
       2:  {
       3:  public:
       4:      // … 
       5:      int a_;
       6:  }
       7:   
       8:  int A:: * pci;
       9:  A   aA;
      10:  A *pcA = &aA;
      11:  pci = &A::a_;
      12:  aA.*pci = 0;
      13:  int b = pcA->*pci

    下面涉及的是指针的转换:(要理解这个概念,只需要记住一条,子类继承自基类,子类包含的东西比基类多)

    在C++中,存在指向 派生类的指针到指向其基类的预定的自动转换。 因为子类至少是一个基类。子类包含的东西多,因此,当需要调用基类的时候,我们传输给子类是可以的,这样不会导致调用的失败,(因为子类包含更多的内容)

    但是,在C++中,对于指向类成员的指针,恰好存在 指向基类成员的指针可以默认的转换到指向任何子类成员的指针。 ——同样,因为子类至少是一个基类,子类包含更多的东西,因此,当我们需要调用类成员指针的时候,子类中一定包含基类的部分的成员,可以将指向基类成员的指针转换到指向子类成员。但是反过来就不对了,因为指向子类的成员在基类中可能是没有的(子类包含的东西多),所以指向子类的成员的指针转换成指向基类的成员的指针的时候,可能导致基类的成员调用的失败。

    对于指向类成员的指针来说,其解引用需需要一个类的对象或者对象指针才能实现,直接解引用是无法完成其功能的!

    今天就写到这了,有机会举个例子,详细的说一下……

  • 相关阅读:
    javaee
    前后台页面跳转及参数传递
    easyu几个常见问题
    利用easyUI填充表格数据
    easyUI数据转换为不同级别的数据
    Java数据结构漫谈-Vector
    RxJava漫谈-RxAndroid使用
    Java数据结构漫谈-Stack
    Java性能漫谈-数组复制之System.arraycopy
    Java数据结构漫谈-LinkedList
  • 原文地址:https://www.cnblogs.com/hwtxf/p/3515339.html
Copyright © 2020-2023  润新知