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

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

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

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

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

C++ 必知必会:条款15 成员的指针并非指针的更多相关文章

  1. 【MySQL 基础】MySQL必知必会

    MySQL必知必会 简介 <MySQL必知必会>的学习笔记和总结. 书籍链接 了解SQL 数据库基础 什么是数据库 数据库(database):保存有组织的数据的容器(通常是一个文 件或一 ...

  2. 必知必会之Java注解

    必知必会之Java注解 目录 不定期更新中-- 元注解 @Documented @Indexed @Retention @Target 常用注解 @Deprecated @FunctionalInte ...

  3. Java面试必知必会:基础

    面试考察的知识点多而杂,要完全掌握需要花费大量的时间和精力.但是面试中经常被问到的知识点却没有多少,你完全可以用 20% 的时间去掌握 80% 常问的知识点. 一.基础 包括: 杂七杂八 面向对象 数 ...

  4. SQL 必知必会

    本文介绍基本的 SQL 语句,包括查询.过滤.排序.分组.联结.视图.插入数据.创建操纵表等.入门系列,不足颇多,望诸君指点. 注意本文某些例子只能在特定的DBMS中实现(有的已标明,有的未标明),不 ...

  5. mysql学习--mysql必知必会1

     例如以下为mysql必知必会第九章開始: 正則表達式用于匹配特殊的字符集合.mysql通过where子句对正則表達式提供初步的支持. keywordregexp用来表示后面跟的东西作为正則表達式 ...

  6. Visual Studio 使用及调试必知必会

    原文:Visual Studio 使用及调试必知必会   一:C# CODING 技巧 1:TODO 然后 CTRL + W + T,打开任务列表,选中 Comments,就会显示所有待做的任务 2: ...

  7. 你必知必会的SQL面试题

    写在前面的话 本文参考原博<走向面试之数据库基础:一.你必知必会的SQL语句练习-Part 1>和<走向面试之数据库基础:一.你必知必会的SQL语句练习-Part 2>进行练习 ...

  8. mysql必知必会

    春节放假没事,找了本电子书mysql必知必会敲了下.用的工具是有道笔记的markdown文档类型. 下面是根据大纲已经敲完的章节,可复制到有道笔记的查看,更美观. # 第一章 了解SQL## 什么是S ...

  9. python网络爬虫,知识储备,简单爬虫的必知必会,【核心】

    知识储备,简单爬虫的必知必会,[核心] 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌 ...

  10. crypto必知必会

    crypto必知必会 最近参加了个ctf比赛,在i春秋,南邮方面刷了一些crypto密码学题目,从中也增长了不少知识,在此关于常见的密码学知识做个小总结! Base编码 Base编码中用的比较多的是b ...

随机推荐

  1. memcached客户端的使用

    一. 概念 Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能. 二. 适用场合 1. 分布式应用 ...

  2. Python基础05 缩进和选择

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 缩进 Python最具特色的是用缩进来标明成块的代码.我下面以if选择结构来举例. ...

  3. oracle修改列的类型

    alter table table_name modify column_name datatype;

  4. [Java] 字符流 Writer,输出字符数据PrintWriter

    package test.stream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...

  5. [Java] 匿名内部类

    package test.file; import java.io.File; import java.io.FilenameFilter; /** * 匿名的内部类 * @author Frost. ...

  6. 大容量导入和导出 XML 文档的示例

    示例表 若要测试示例 A,必须创建示例表 T.   USE tempdb CREATE TABLE T (IntCol int, XmlCol xml); GO 示例数据文件 在运行示例 A 之前,必 ...

  7. C Primer Plus(第五版)11

    第 11 章 字符串和字符串函数 在本章中你将学习下列内容: · 函数: gets(), puts(), strcat(), strncat(), strcmp(), strncmp(), strcp ...

  8. [转]dispatcher、redirect和chain三种result type的使用区别

    http://blog.163.com/zhangfei_jiayou/blog/static/562441782009826045248/ dispatcher:用于页面转发,页面跳转过程一直是同一 ...

  9. OLAP如何实现数据的聚合计算-分析过程

  10. 用imageNamed加载图片产生的问题

    通常我们会用imageNamed:来加载图片,但是用这个API有个问题,就是它会缓存加载的image. 因此,对于那些被重用的图片,这个API很高效.但是对于那些使用很少的图片,用这个就很耗内存,那怎 ...