中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
Item 15.指向类数据成员的指针
作者:未知 时间:2005-07-27 23:18 出处:CSDN 责编:chinaitpower
              摘要:Item 15.指向类数据成员的指针

Item 15. Pointers to Class Members Are Not Pointers


Pointers to Class Members:指向类成员的指针

注:本条中只涉及到非静态的数据成员
--------------------------------------------------------
1、类成员的指针之声明:
 class C {
  public:
    //...
    int a_;
 };
 int C::*pimC; //指向类C成员的指针,这里只是声明

2、类成员的指针之含义:
 
 类成员的指针用“指针”这个词来描述很容易引起混淆,因为类成员的指针和指针的含义大相径庭:
指针包含地址;而类成员的指针并不涉及到内存地址,它只是引用了一个类的某个成员,而不是一个具体的对象的某个成员,类没有内存地址,因此类成员的指针也不能指向内存的某个地方,它通常只是一个偏移量(offset)。然而由于标准C++没有定义类成员的指针的实现,因此各个编译器厂家的实现也不尽相同,但大多数是用一个整数来表示这个偏移量。

  pimC = &C::a_;   //获取成员a_在C中的偏移量,如果a_为静态成员则pimC指向C::a_的地址
 
3、访问偏移量对应的数据成员
  C aC;
  C *pC = &aC;
  aC.*pimC = 0;    //*pimC应用到了C的每一个对象上
  int b = pC->*pimC;
  有了一个类成员的偏移量,为了取得在这个偏移量上的数据成员,我们就需要该类的一个对象的地址。于是,“.*”和“->*”就粉墨登场了。
  aC.*pimC的含义: 访问对象aC在偏移量为pimC上的数据成员
  pC->*pimC的含义: 访问指针pC指向的对象在偏移量为pimC上的数据成员

4、当继承出现后……
  在继承体系中,子类对象的指针可以隐式的转换位父类对象的指针,反之需要显示的转换。
  但类成员的指针转换规则恰恰相反。
  不用奇怪,大家都遵循同一的规则:父类有的子类肯定有,子类有的父类未必有。
 
 class Shape {
    //...
    Point center_;
    //...
};
class Circle : public Shape {
    //...
    double radius_;
    //...
};

Point Circle::*loc = &Shape::center_; // OK
//double Shape::*extent =&Circle::radius_; // error!         


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有