C++编程思想 第1卷 第11章 引用和拷贝构造函数 指向成员的指针

指针是指向一些内存地址的变量,即可以是数据的地址也可以是函数的地址

来一个简单的结构 如果有一个这样结构的指针sp和对象so,可以通过下面方法
选择成员

//: C11:SimpleStructure.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
struct Simple { int a; };
int main() {
  Simple so, *sp = &so;
  sp->a;
  so.a;
} ///:~

现在,假设有一个普通的指向integer的指针ip。 为了取得ip指向的内容,
用一个*号间接引用这个指针

*ip = 4;

考虑如果有一个指向一个类对象成员的指针,如果假设它代表对象内一定的
偏移,会发生什么?
为了取得指针指向的内容,必须用*号间接引用

如何建立和使用指向数据成员的指针

//: C11:PointerToMemberData.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
#include <iostream>
using namespace std;

class Data {
public:  
  int a, b, c; 
  void print() const {
    cout << "a = " << a << ", b = " << b
         << ", c = " << c << endl;
  }
};

int main() {
  Data d, *dp = &d;
  int Data::*pmInt = &Data::a;
  dp->*pmInt = 47;
  pmInt = &Data::b;
  d.*pmInt = 48;
  pmInt = &Data::c;
  dp->*pmInt = 49;
  dp->print();
  getchar();
} ///:~


除了对于一些特例,需要精确地指向,这里就显得有些过于难用而无法随处
使用

成员指针是受限制是,它们仅能被指定给类中的确定的位置
我们不能使用普通指针那样增加或比较成员指针

扫描二维码关注公众号,回复: 2492342 查看本文章

输出
a = 47, b = 48, c = 49
 

猜你喜欢

转载自blog.csdn.net/eyetired/article/details/81218862