[技术]浅谈c++ this指针
背景
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就代表了对象本身
如何使用
- 其实你在非静态成员函数中调用非静态数据成员时,就已经使用了this指针进行了对数据成员的调用
- 重载操作符时的使用可以使代码更加简洁
- 当参数与对象数据成员变量名相同时必须显式调用this指针,否则会出现参数自赋值的情况,且数据成员并未被赋值
- 等等......
总结
this指针是一个神圣的指针,不在必须修改它的情况下不要轻易修改它
——《c++面向对象高效编程》
其实this指针也没那么神秘,当你了解了它之后,就可以更好地使用它,使用对象,使用c++了
[技术]浅谈c++ this指针的更多相关文章
- .net中对象序列化技术浅谈
.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储 ...
- [技术]浅谈OI中矩阵快速幂的用法
前言 矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中,矩阵的运算是数值分析领域的重要问题. 基本介绍 (该部分为入门向,非入门选手可以跳过) 由 m行n列元素排列成的矩形阵列.矩阵里的 ...
- 转 浅谈C++中指针和引用的区别
浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别 指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性 ...
- 开发技术--浅谈Python函数
开发|浅谈Python函数 函数在实际使用中有很多不一样的小九九,我将从最基础的函数内容,延伸出函数的高级用法.此文非科普片~~ 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点 ...
- 开发技术--浅谈python数据类型
开发|浅谈python数据类型 在回顾Python基础的时候,遇到最大的问题就是内容很多,而我的目的是回顾自己之前学习的内容,进行相应的总结,所以我就不玩基础了,很多在我实际生活中使用的东西,我会在文 ...
- 开发技术--浅谈python基础知识
开发|浅谈python基础知识 最近复习一些基础内容,故将Python的基础进行了总结.注意:这篇文章只列出来我觉得重点,并且需要记忆的知识. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对 ...
- C++ traits技术浅谈
前言 traits,又被叫做特性萃取技术,说得简单点就是提取"被传进的对象"对应的返回类型,让同一个接口实现对应的功能.因为STL的算法和容器是分离的,两者通过迭代器链接.算法的实 ...
- 浅谈C++中指针和引用的区别者之间的区别和用法(转)
指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个 ...
- Node.JS + MongoDB技术浅谈
看到一个Node.JS + MongoDB的小样例,分享给大家.魔乐科技软件学院(www.mldnjava.cn)的讲座 Node.JS + MongoDB技术讲座 云计算 +大数据 ...
随机推荐
- PHP设计模式:简单工厂
示例代码详见https://github.com/52fhy/design_patterns 简单工厂 简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例. 也就是使用的 ...
- 记一次linux主机名莫名其妙变成了bogon
起因:公司网络接口做了接口认证,虚拟机桥接至物理网卡无法完成认证进行网络访问,无奈之下只能讲虚拟机网络模式更改为NAT模式,更改完成之后进行ssh登录,发现主机名发生了变化. 更改NAT模式之前 [r ...
- mysql的my.ini文件详解
mysql数据库在配置时包含很多信息:端口号,字符编码,指定根路径 basedir,指定数据存放的路径等信息 mysql的字体编码分为两种: 服务器编码 客户端输入的编码 通常服务器的编码都是utf- ...
- python 导入informixdb模块
最近碰到Linux平台使用python连接informixdb数据库的问题.整理如下: 1.安装 informixdb 下载InformixDB-2.5.tar.gz 解压之后,在README文档下看 ...
- Web.config 自动替换值
开发项目中,有些可能会改变的值,如是否记录日志,记录日志路径等,我们都会配置在Web.config的<appSettings></appSettings>节点, 也比如数据库的 ...
- jQuery淡入淡出的轮播图
html结构: <div class="banna"> <ul class="img"> ...
- 使用Ansible进行项目的自动部署(Tomcat、Weblogic)
原文:https://github.com/x113773/testall/issues/4 问题:Weblogic/Tomcat 通过JAVA直接远程调用或者调用本地Shell还是通过Ansible ...
- stringsteam使用之整型转字符串
最近需要用到整型转字符串的操作,学习了stringstream一些皮毛. 首先需要包含头文件. #include<sstream> 然后用流操作的方式将值传递给stringstream对象 ...
- H5学习第三周
今天主要总结弹性布局 flex使用 1.给父容器添加display flex/inline-flex;属性 2.父容器可以使用的属性值有 >>>flex-direction 属性决定 ...
- java项目(非ssm等框架)下的quartz定时器任务
第一步:引包 要使用Quartz,必须要引入以下这几个包: 1.log4j-1.2.16 2.quartz-2.1.7 3.slf4j-api-1.6.1.jar 4.slf4j-log4j12-1. ...