8、对象指针  声明: 类名 *对象指针名

Point A(5,10);

Point *ptr;

ptr=&A;//通过指针访问对象成员:对象指针名->成员名。ptr->getX();相当于(*ptr).getX;

曾经错误的前向引用的例子

class Fred; //前向引用声明

class Barney {   Fred x; //错误:类Fred的声明尚不完善,若改成Fred *x;就正确了。 };//因为没有声明fred类的对象,编译器不知道如何分配内存,所以出错,如果//改成指针类型的对象,相当于unsigned long类型,编译器可以明确处理。

class Fred {   Barney y; }; 

This指针 隐含于每一个类的成员函数中的特殊指针,存放当前对象的地址,通过对象名调用成员函数,系统先将该对象的地址赋给this指针,然后调用成员函数,成员函数对对象的数据进行操作时,就隐含使用了this指针。如:point类的构造函数中语句 X=xx;相当于this->X=xx;

8.1 指向类的非静态成员的指针  通过指向成员的指针只能访问公有成员,声明:指向公有数据成员的指针 类型说明符 类名::*指针名;   指向公有函数成员的指针   类型说明符  (类名::*指针名)(参数表);仅仅这样声明之后并不能直接使用,必须指明指针指向那个成员,需要赋给指针地址(初始化)。指针名=&类名::数据成员名;该处只是赋给指针一个相对地址,因为一个数据成员名并没有一个确切的地址,因此还需要落实到对象名(起始地址),结合相对地址(偏移量)才能真正访问到数据成员:

对象名.*类成员指针名;  对象指针名->*类成员指针名

例6-13 访问对象的公有成员函数的不同方式

int main()   //主函数

{ Point A(4,5);       //声明对象A

 Point *p1=&A;   //声明对象指针并初始化

   //声明成员函数指针并初始化

 int (Point:::*p_GetX)()=Point::GetX;     

   //1)使用成员函数指针访问成员函数

 cout<<(A.*p_GetX)()<<endl;       

   //2)使用对象指针访问成员函数

 cout<<(p1->GetX)()<<endl;        

   //3)使用对象名访问成员函数

cout<<A.GetX()<<endl;  }

最新文章

  1. java https单向认证(忽略认证)并支持http基本认证
  2. 获取DataTable选择第一行某一列值
  3. 【处理手记】U盘读不出+卷标丢失+像读卡器+大小0+无媒体
  4. Sharepoint2013 中想要将网站另存为模板步骤
  5. 360极速浏览器使用postman
  6. HD2255奔小康赚大钱(最大权匹配模板)
  7. No.006 ZigZag Conversion
  8. 信号之sigprocmask函数
  9. Tcl语言笔记之一
  10. python中从文件中读取数据
  11. 大数据学习(6)MapReduce应用
  12. 记录nodejs的writeHead
  13. 关于 MongoDB 与 SQL Server 通过本身自带工具实现数据快速迁移 及 注意事项 的探究
  14. RabbitMQ基础知识及Linux安装
  15. 使用getopts处理输入参数
  16. 51Nod1577 异或凑数 线性基
  17. MongoDB的基本查询
  18. Ecstore 默认图片压缩质量差的问题解决方法
  19. sql server 表变量存储临时查询数据
  20. 11GR2 中的常见 RMAN 问题

热门文章

  1. jdk-8u241各系统版本
  2. C++中static关键字的用法
  3. Ubuntu-Server18.04开启无线网卡并配置静态ip
  4. SVN仓库备份和迁移
  5. 查看mysql是否锁表了
  6. PHP0020:PHP 单文件上传 多文件上传
  7. 解决session共享问题
  8. KVM命令--优化篇(2)
  9. 8组 上课啦(Class BUddy Pro)使用体验
  10. spring的困惑--org.springframework.web.servlet.DispatcherServlet noHandlerFound