class Person
{
public:int m_A;//非静态成员变量,属于对象上void func(/*Person * this*/){}; //非静态成员函数 不属于对象身上static int  m_B;//静态成员函数,不属于对象上static void fun2(){};//静态成员函数 ,不属于对象身上//double m_C;//12错误 16正确,解决方法#pragma pack(1)
};
void test02()
{//this指针指向被调用的成员函数Person p1;p1.func(); //编译器会偷偷 加入一个this指针 Person * this Person p2;p2.func();
}

C++编译器给每个“成员函数“增加了一个隐藏的指针参数,让该指 针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访 问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。

this指针使用

  1. 指针永远指向当前对象
  2. 解决命名冲突
  3. *this指向对象的本体
  4. 非静态成员函数才有this指针

this指针的类型:

  1. 类类型* const

  2. 只能在“成员函数”的内部使用

  3. this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this 形参。所以对象中不存储this指针。

  4. this指针是成员函数第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传递,不需要用户 传递

       #include<iostream>using namespace std;// this 可以解决命名冲突class Person{public:Person(int age){this->age = age;}//对比年龄void compareAge(Person &p){if (this->age == p.age){cout << "相等" << endl;}else{cout << "不相等" << endl;}}//年龄相加Person&  PlusAge(Person &p){this->age += age;return *this;  //*this指向对象的本体}int age;};void test01(){Person p1(10);cout << "p1的年龄" << p1.age << endl;Person p2(10);p1.compareAge(p2);p1.PlusAge(p2).PlusAge(p2);//链式编程//函数返回值作为左值 返回引用cout << "p1的年龄" << p1.age << endl;}int main(){test01();system("pause");return 0;}
    

c++中this指针基本概念和使用相关推荐

  1. c语言中的void指针,C程序中void指针的概念

    到目前为止,我对void指针的轻描淡写如下. 当使用关键字void声明指针变量时,它将成为通用指针变量.任何数据类型(char,int,float等)的任何变量的地址都可以分配给void指针变量. m ...

  2. java char指针数组_简单总结C语言中各种类型的指针的概念

    C语言中有很多关于指针的使用,指针也是C语言的灵魂所在,而且C语言中也有很多有关指针的概念,这里学习并总结了一些知道的概念. 常量指针:首先它是一个指针,常量只是用来修饰指针的定语.其定义如下: ch ...

  3. c语言的各种类型的指针,简单总结C语言中各种类型的指针的概念

    2016 这篇文章主要简单总结了C语言中各种类型的指针的概念,指针可以说是C语言本身所具有的最大特性,平时根据不同使用场合习惯地将其简单分类,需要的朋友可以参考下 C语言中有很多关于指针的使用,指针也 ...

  4. C语言中易混淆的标识符,C语言指针中易混淆的概念

    C语言指针中易混淆的概念 一.数组指针与指针数组的区别 考虑数组的指针的时候我们要同时考虑类型和维数这两个属性.换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位置表示他的种类. ...

  5. c语言中数组的概念及作用,详解C语言中的指针与数组的定义与使用

    指针的特点 他就是内存中的一个地址 指针本身运算 指针所指向的内容是可以操作的 操作系统是如何管理内存的 栈空间 4M~8m的大小 当进入函数的时候会进行压栈数据 堆空间 4g的大小 1g是操作系统 ...

  6. 【Smart_Point】C/C++ 中共享指针 shared_ptr

    1. 共享指针 shared_ptr 目录 1. 共享指针 shared_ptr 1.1 共享指针解决的问题? 1.2 创建 shared_ptr 对象 1.3 分离关联的原始指针 1.4 自定义删除 ...

  7. 【Smart_Point】C/C++ 中智能指针

    C++11智能指针 目录 C++11智能指针 1.1 C++11智能指针介绍 1.2 为什么要使用智能指针 1.2.1 auto_ptr(C++98的方案,C++11已经抛弃)采用所有权模式. 1.2 ...

  8. 各种语言中对指针的叫法

    如果没有指针,就无法构造正统的数据结构, 因此,比较成熟的.正统的编程语言,必定会存在指针3. 3以前, FORTRAN . COBOL 和BASIC 中 都没有指针,但是在 fortran90.Vi ...

  9. C++中this指针的用法.

    原文地址http://blog.csdn.net/guirenwang/article/details/2611355 this指针只能在一个类的成员函数中调用,它表示当前对象的地址.下面是一个例子: ...

最新文章

  1. 高级网络配置《 bond team桥接 》的建立
  2. 数据蒋堂 | 大数据集群该不该透明化?
  3. mysql dml ddldcl权限_MySQL中的DML、DDL、DCL到底是什么呢?
  4. LeetCode Longest Absolute File Path(栈和前缀和解法)
  5. 我的第一份vim程序
  6. ElasticSearch聚合分析
  7. 【Git、GitHub、GitLab】一 Git安装与Git最小配置
  8. Tomcat配置和Web应用程序开发
  9. 软件测试中开发团队和测试团队的职责
  10. 您的组织策略阻止我们为您完成此操作,有关详细信息,请联系技术支持
  11. ERP软件实施要提供那些环境条件
  12. filco圣手二代蓝牙连接win10系统(华硕笔记本)
  13. 攻防世界 WEB mfw
  14. Ubuntu系统下打开chm文件
  15. 5-(4-氨基苯基)-10,15.20-三苯基卟啉(TPP-NH2)/多金属氧酸盐-四苯基卟啉化合物TPP-PW齐岳供应
  16. bilibili_Linux4_Linux常用命令
  17. 【java华为机试】HJ10 字符个数统计
  18. O2O模式和B2C模式的区别是什么?
  19. fivem服务器文件,云梦YumVGTA5 FiveM 服务器插件管理器
  20. springboot整合Jasypt对数据库密码进行加密

热门文章

  1. Linux SPI框架
  2. 转:Google论文之三----MapReduce
  3. android:layout_weight属性的简单使用
  4. Android中的Touch事件处理流程
  5. 【转】企业开发的困境与变局
  6. jsp 上传转码_最完整的处理jsp处理乱码问题步骤,不需要手工转码
  7. html的table弹窗_Js弹出基于Table的可关闭浮动层
  8. centos6安装mysql并远程连接_Ubantu下MySQL安装、部署和远程连接
  9. 手机工商银行怎么转账_工商银行信用卡要哪些申请条件?想成功办理你需要了解这些!...
  10. python常用函数中文_【python】python常用函数