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

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

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

  • 相关阅读:
    如何将本地项目上传到码云
    启动Springboot 报错 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Sat Jan 12 15:50:25 CST 2019 There was an unexpected error (type=Not
    Redis
    c++指针
    zed hdmi核构建error:xx uses VFP register arguments, hdmi02.elf does not
    github只下载某个文件夹的方法
    linux下vivado tcl使用 & linux环境变量设置
    vivado hls make csim error: /opt/Xilinx/Vivado_HLS/2016.4/lnx64/tools/opencv/libopencv_highgui.so: undefined reference to `TIFFR
    linux下hls运行make csim出现:../common/Makefile.rules:55: *** multiple target patterns. Stop.
    读写sd卡代码分析(vivado sdk c++)
  • 原文地址:https://www.cnblogs.com/hwtxf/p/3515339.html
Copyright © 2011-2022 走看看