背景

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学习笔记七

    System对IO的支持 System是系统的类,其中的方法都是在控制台的输入和输出,但是通过重定向也是可以对文件的输入输出 System中定义了标准输入.标准输出和错误输出流,定义如下: stati ...

  2. flask 扩展之 -- flask-login

    一. 使用 Werkzeug 实现密码散列. generate_password_hash(password, method=pbkdf2:sha1, salt_length=8) 将原始密码作为输入 ...

  3. Linux系统下源码安装rz/sz命令

    背景:在windows环境下,使用xshell远程连接公司内部做的一个类似centos的系统,但该linux系统yum install有问题,只能源码安装. root 账号登陆后,依次执行以下命令: ...

  4. [USACO08NOV]奶牛混合起来Mixed Up Cows

    题目描述 Each of Farmer John's N (4 <= N <= 16) cows has a unique serial number S_i (1 <= S_i & ...

  5. wildfly10报错2:ID注释有错

    13:55:56,612 INFO [org.jboss.modules] (main) JBoss Modules version 1.5.1.Final 13:55:56,891 INFO [or ...

  6. SilverLight搭建WCF聊天室详细过程[转]

    http://www.silverlightchina.net/html/zhuantixilie/getstart/2011/0424/7148.html 默认节点 SilverLight搭建WCF ...

  7. docker 17 安装

    docker17 安装 新增一键安装命令: curl -sSL https://get.docker.com/ | sh 以下为手动安装过程 翻译自 Get Docker for Ubuntu Doc ...

  8. Python3 常用数据类型语法

    1.int类型 int类型的数据是没有长度限制的,它的最大长度只与计算机的内存有关. bin(i)      返回二进制表示结果, hex(i)      十六进制, int(i)       整数( ...

  9. Newtonsoft.Json输出JSON 时动态忽略属性

    一,前言 最近做项目采用Json形式和其他客户端交互,借助于Newtonsoft.Json . 由于业务场景不同,输出的Json内容也不同.要想忽略的属性,可以借助Newtonsoft.Json的特性 ...

  10. javascript 玩转Date对象

    前言:最近在做一个日期选择功能,在日期转换的时候经常换到晕,总结一下常用的Date对象的相关用法,方便日后直接查看使用- 1. new Date()的使用方法有: 不接收任何参数:返回当前时间: 接收 ...