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 对HU做货物移动报错-Only 0 serial numbers entered instead of 30 -

    SAP 对HU做货物移动报错-Only 0 serial numbers entered instead of 30 - 元旦刚过,就收到客户的业务人员报错说,当其对HU做转库(同一个公司代码下工厂到 ...

  2. 共同战“疫”,CODING 帮助研发团队高效协同

    新冠疫情下,家里蹲的日子继续延长.部分企业虽然受困于不能回公司办公,但都陆续开启了远程协作办公,远程协作领域被推上了风口.但「远程协同」看不见摸不着工作伙伴,个人的自律能力也无法保证,难免出现沟通响应 ...

  3. 邓Laravel2020-01-28

    ORM .一对一 hasOne $this->hasOne('外键的模型名称','外键的id','自己表里对应的id')// demo一对一 用户表里又area_id与地区表id一致 用户表和地 ...

  4. Python和Anoconda和Pycharm安装教程

    简介 Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的.大型项目的开发. ...

  5. MySQL快速回顾:数据库和表操作

    前提要述:参考书籍<MySQL必知必会> 利用空闲时间快速回顾一些数据库基础. 4.1 连接 在最初安装MySQL,可能会要求你输入一个管理登录(通常为root)和一个口令(密码). 连接 ...

  6. Node.js文档-os

    获取操作系统相关信息 引用 const os = require('os') os.cpus() 获取当前机器的CPU信息 console.log(os.cpus()) 打印结果: [ { model ...

  7. Debian 10 xfce 错误提示 ACCESS DENIED

    闲来无事重新安装自己的服务器发现很多关于Debian的初始安装问题都已经陌生了在此重新整理下自己安装所遇到的问题: ACCESS DENIED  释: 登录成功拒绝Root密码访问 解决方法: loc ...

  8. SQL语法学习记录——JOIN

    学习内容参考来源:www.runoob.com JOIN准备 --为了方便练习,在数据库中创建演示数据: create database TEST; use TEST ; ---------- go ...

  9. 第7章.字符串、String类和StringBuilder类

    参考链接: https://www.runoob.com/csharp/csharp-string.html https://www.cnblogs.com/cang12138/p/7323709.h ...

  10. javascript 基础整理

    js编码标准 参考 数据类型 注意事项