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. SAP S4HANA里委外加工采购功能的变化

    SAP S4HANA里委外加工采购功能的变化 [Part 1:主要变化点] 1.1,采购订单界面上的变化, 1.2, 新的事务代码: ME2ON (Subcontracting Cockpit), 1 ...

  2. C#中WinFrom保存文件SaveFileDialog类的使用方法

    C#中WinFrom保存文件SaveFileDialog类的使用方法 使用的命名空间是:System.Windows.Forms; 常用属性:   Title:保存对话框的标题,默认为"另存 ...

  3. 嵌入式设备sqlite库移植和使用

    1]官网下载sqlite-autoconf-3300100.tar.gz,网址https://www.sqlite.org/download.html,2]解压:tar zxvf sqlite-aut ...

  4. java 上传文件到七牛云中

    import com.alibaba.fastjson.JSONObject;import com.qiniu.common.QiniuException;import com.qiniu.commo ...

  5. 【spring boot】SpringBoot初学(9.1)– 简单配置corsFilter对跨域请求支持

    前言 只是简单的配置实现了cors,并没有讲任何东西.(有兴趣的可看: CORS 跨域 实现思路及相关解决方案) github: https://github.com/vergilyn/SpringB ...

  6. DockerFile优化总结

    1- dockerFile为什么要优化 ___ 随着我们对docker镜像的持续使用,在此过程中如果不加以注意并且优化,镜像的体积会越来越多.很多时候我们在使用docker部署应用时,会发现镜像的体积 ...

  7. Linux-开发环境安装

    JDK安装: 执行: yum -y list java* 展示所有的javajdk 安装jdk: yum install -y java-1.8.0-openjdk-devel.x86_64 1.8. ...

  8. Linux命令(1)——top命令

    一.功能 显示当前系统正在执行的进程的相关信息[进程ID.内存占用率.CPU占用率等] 性能分析工具 实时动态显示(系统中各个进程的资源占用情况) 二.用法 -b                    ...

  9. spring boot中通用应用程序属性

    可以在application.properties文件内部application.yml,文件内部或命令行开关中指定各种属性.本附录提供了常见的Spring Boot属性列表以及对使用它们的基础类的引 ...

  10. pandas模块的数据操作

    数据操作 数据操作最重要的一步也是第一步就是收集数据,而收集数据的方式有很多种,第一种就是我们已经将数据下载到了本地,在本地通过文件进行访问,第二种就是需要到网站的API处获取数据或者网页上爬取数据, ...