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;  }

C++——指针4的更多相关文章

  1. TODO:Golang指针使用注意事项

    TODO:Golang指针使用注意事项 先来看简单的例子1: 输出: 1 1 例子2: 输出: 1 3 例子1是使用值传递,Add方法不会做任何改变:例子2是使用指针传递,会改变地址,从而改变地址. ...

  2. enote笔记法使用范例(2)——指针(1)智能指针

    要知道什么是智能指针,首先了解什么称为 “资源分配即初始化” what RAII:RAII—Resource Acquisition Is Initialization,即“资源分配即初始化” 在&l ...

  3. C++虚函数和函数指针一起使用

    C++虚函数和函数指针一起使用,写起来有点麻烦. 下面贴出一份示例代码,可作参考.(需要支持C++11编译) #include <stdio.h> #include <list> ...

  4. C++11 shared_ptr 智能指针 的使用,避免内存泄露

    多线程程序经常会遇到在某个线程A创建了一个对象,这个对象需要在线程B使用, 在没有shared_ptr时,因为线程A,B结束时间不确定,即在A或B线程先释放这个对象都有可能造成另一个线程崩溃, 所以为 ...

  5. c 数组与指针的使用注意事项

    数组变量和指针变量有一点小小的区别 所以把数组指针赋值给指针变量的时候千万要小心 加入把数组赋值给指针变量,指针变量只会包含数组的地址信息 而对数组的长度一无所知 相当于指针丢失了一部分信息,我们把这 ...

  6. Marshal.Copy将指针拷贝给数组

    lpStatuss是一个UNITSTATUS*的指针类型实例,并包含SensorDust字段 //定义一个数组类型 byte[] SensorDust = new byte[30] //将指针类型拷贝 ...

  7. C++智能指针

    引用计数技术及智能指针的简单实现 基础对象类 class Point { public: Point(int xVal = 0, int yVal = 0) : x(xVal), y(yVal) { ...

  8. EC笔记:第三部分:17、使用独立的语句将newed对象放入智能指针

    一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include <iostream> using namespace std; int func1(){ //返回 ...

  9. 智能指针shared_ptr的用法

    为了解决C++内存泄漏的问题,C++11引入了智能指针(Smart Pointer). 智能指针的原理是,接受一个申请好的内存地址,构造一个保存在栈上的智能指针对象,当程序退出栈的作用域范围后,由于栈 ...

  10. 智能指针unique_ptr的用法

    unique_ptr是独占型的智能指针,它不允许其他的智能指针共享其内部的指针,不允许通过赋值将一个unique_ptr赋值给另一个unique_ptr,如下面错误用法: std::unique_pt ...

随机推荐

  1. 头部布局,搜索验证和AJAX自动搜索提示,并封装成组件,提高代码复用性

    index.html 头部区结构和样式 效果图 静态样式 index.html中的部分 <!-- 头部 --> <div class="header"> & ...

  2. Apache Log4j 反序列化代码执行(CVE-2019-17571) 漏洞分析

    Apache Log4j 漏洞分析 仅用于研究漏洞原理,禁止用于非法用途,后果自负!!! CVE-2019-17571 漏洞描述 Log4j是美国阿帕奇(Apache)软件基金会的一款基于Java的开 ...

  3. 5.Python安装依赖(包)模块方法介绍

    1.前提条件 1). 确保已经安装需要的Python版本 2). 确保已经将Python的目录加入到环境变量中 2. Python安装包的几种常用方式 1). pip安装方式(正常在线安装) 2). ...

  4. 【01】HTML_day01_01-前言&WEB标准

    typora-copy-images-to: media 第01阶段.前端基础.认识WEB 基础班学习目标 目标: 能根据psd文件,用HTML+CSS 布局出符合W3C规范的网页. 网站首页 列表页 ...

  5. ubuntu18.04误删apt-get命令恢复总结

    1.背景 由于使用aptitude命令替换了apt-get命令后感到后悔,想要恢复apt-get命令,特此总结以下踩过的坑 aptitude和apt-get的区别:https://www.cnblog ...

  6. Linux学习记录(一):常用命令

    此篇文章为博主在Linux学习过程中的一些记录,记录在此方便查阅. 常用命令总结 ls 显示目录内容 (list directory contents) ls 不显示隐藏的文件和子目录 ls -a 显 ...

  7. linux系统下apache服务的启动、停止、重启命令

    本文章简单的介绍了关于linux下在利用命令来操作apache的基本操作如启动.停止.重启等操作,对入门者不错的选择.本文假设你的apahce安装目录为 usr local apache2,这些方法适 ...

  8. Nginx虚拟主机配置(20200202)

    一台机器上跑多个站点,即多个域名 curl -xIP:port 域名    用来指定访问的域名在哪个IP的哪个端口上 Nginx默认虚拟主机 不管什么域名解析到该服务器,都会访问到默认虚拟主机 ngi ...

  9. JAVA JDK keytool 生成数字证书

    简介: 数字证书作为网络安全数据传输的凭证,web在传输时客户端(浏览器)和 服务端(服务器)先进行会话握手,在握手过程中服务端会验证客户端的是否已经在服务端做了认证,这是单向认证.如果是双向认证的话 ...

  10. Case Study - 用户复购行为预测

    Problem 对于商家来说提前识别回头客是一件集中资源提高新品销售量的头等大事,各大商家为了吸引顾客的二次购买都会实行各种像是促销.优惠券.折扣之类的策略.按理说越了解客户,越知道客户的喜好,越能精 ...