背景

matrix operator*=(const matrix &a){
*this=*this*a;
return *this;
}

XXX:诶,你这个*this是什么啊,是指针吗

博主:啊啊啊?这个问题= =(唔),我马上去写博客,你来我博客上看吧= =

基本介绍

照例引度娘:

一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。

仍然是不清楚的?没关系,我们先看代码:

struct matrix{
int data[][];
matrix operator*(const matrix &a){
matrix tmp;
for(int i=;i<;i++)
for(int j=;j<;j++){
tmp.data[i][j]=;
for(int k=;k<;k++)
tmp.data[i][j]+=data[i][k]*a.data[k][j];
}
return tmp;
}
};

我们注意到,我们在函数中用了三个matrix变量,但是我们注意到,再调用data数据成员时,我们写了这样三句话:

tmp.data[][]
a.data[][]
data[][]

问题来了,最后一行的data是属于哪个结构体变量的呢,显然,我们是通过另一个对象来调用的重载乘号(关于重载,我会另写一篇文章),那么,显然这个data就是属于这个对象的,事实上,我们可以这样认为最后一句话的data的调用:

(*this).data[][]//或this->data

终于引入到this了= =

this指针,指向的就是对象本身的地址,并将其作为一个隐含参数传递给函数,也就是说,当我们各种调用对象内部的数据成员时,我们就可以认为,自己隐式调用了this指针来完成对对象的调用。

*this则是对this的解引用,也就是说,this原本是指向对象本身的指针,而*this就代表了对象本身

如何使用

  1. 其实你在非静态成员函数中调用非静态数据成员时,就已经使用了this指针进行了对数据成员的调用
  2. 重载操作符时的使用可以使代码更加简洁
  3. 当参数与对象数据成员变量名相同时必须显式调用this指针,否则会出现参数自赋值的情况,且数据成员并未被赋值
  4. 等等......

总结

this指针是一个神圣的指针,不在必须修改它的情况下不要轻易修改它

——《c++面向对象高效编程》

其实this指针也没那么神秘,当你了解了它之后,就可以更好地使用它,使用对象,使用c++了

[技术]浅谈c++ this指针的更多相关文章

  1. .net中对象序列化技术浅谈

    .net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储 ...

  2. [技术]浅谈OI中矩阵快速幂的用法

    前言 矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中,矩阵的运算是数值分析领域的重要问题. 基本介绍 (该部分为入门向,非入门选手可以跳过) 由 m行n列元素排列成的矩形阵列.矩阵里的 ...

  3. 转 浅谈C++中指针和引用的区别

    浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别   指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性 ...

  4. 开发技术--浅谈Python函数

    开发|浅谈Python函数 函数在实际使用中有很多不一样的小九九,我将从最基础的函数内容,延伸出函数的高级用法.此文非科普片~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点 ...

  5. 开发技术--浅谈python数据类型

    开发|浅谈python数据类型 在回顾Python基础的时候,遇到最大的问题就是内容很多,而我的目的是回顾自己之前学习的内容,进行相应的总结,所以我就不玩基础了,很多在我实际生活中使用的东西,我会在文 ...

  6. 开发技术--浅谈python基础知识

    开发|浅谈python基础知识 最近复习一些基础内容,故将Python的基础进行了总结.注意:这篇文章只列出来我觉得重点,并且需要记忆的知识. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对 ...

  7. C++ traits技术浅谈

    前言 traits,又被叫做特性萃取技术,说得简单点就是提取"被传进的对象"对应的返回类型,让同一个接口实现对应的功能.因为STL的算法和容器是分离的,两者通过迭代器链接.算法的实 ...

  8. 浅谈C++中指针和引用的区别者之间的区别和用法(转)

    指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个 ...

  9. Node.JS + MongoDB技术浅谈

    看到一个Node.JS + MongoDB的小样例,分享给大家.魔乐科技软件学院(www.mldnjava.cn)的讲座 Node.JS + MongoDB技术讲座          云计算 +大数据 ...

随机推荐

  1. Java IO学习笔记四

    内存操作流 之前的所有的流操作都是针对文件的,但是有时候只是想要实现数据间转换,此时如果我们想要创建一个文件然后再删除文件,那样显得有点麻烦,因此此时的内存操作流就显得很适合这类的操作,因为它只是在内 ...

  2. none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)

    本章开始讨论 Docker 网络. 我们会首先学习 Docker 提供的几种原生网络,以及如何创建自定义网络.然后探讨容器之间如何通信,以及容器与外界如何交互. Docker 网络从覆盖范围可分为单个 ...

  3. module.exports与exports,export和export default

    还在为module.exports.exports.export和export default,import和require区别与联系发愁吗,这一篇基本就够了! 一.首先搞清楚一个基本问题: modu ...

  4. Linux编程之有限状态机FSM的理解与实现

    有限状态机(finite state machine)简称FSM,表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用.FSM是一种逻辑单元内部的一种高效编程方法,在 ...

  5. int a=1,b=~a;请问b的值是多少?

    int a=1,b=~a; 首先计算机中存储的是二进制补码. 把1转为二进制:0000 0001  ->反码  0000 0001 ->补码   0000 0001 ->取反  11 ...

  6. thinkphp之获取客户端IP地址

    /** * 获取客户端IP地址 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 * @return mixed */ function get_cl ...

  7. dos命令窗口修改编码,CMD编码修改方法

    dos命令窗口修改编码,CMD编码修改方法 第一步,打开命令窗口有两种方法第一种:可以点击左下角的开始按钮,在运行里面输入CMD,然后敲回车2第二种:组合键WIN+R键,组合键后就会弹出窗口,然后输入 ...

  8. php中有关合并某一字段键值相同的数组合并

    <?php function combine($array,$start,$key,$newkey){ static $new; //静态变量 foreach($array as $k=> ...

  9. Python基础-类变量和实例变量

    Python基础-类变量和实例变量 写在前面 如非特别说明,下文均基于Python3 大纲: 1. 类变量和实例变量 在Python Tutorial中对于类变量和实例变量是这样描述的: Genera ...

  10. 5.Smart使用内置函数或者自定义函数

    1.使用内置函数 例如使用date函数 {"Y-m-d"|date:$time}格式{第一个参数|方法:第二个参数:第三个参数}即可转换成 2016-07-19  2.使用resi ...