this指针

news2024/12/27 15:44:28

目录

一、关于this指针的一个经典问题

二、this指针的特点

(一)本质

(二)应用

1. 不使用this指针

2. 使用this指针

3. 两者代码对比

三、代码举例

1. 举例1 

2. 举例2

 


一、关于this指针的一个经典问题

当你进入一个房子后,   
你可以看见桌子、椅子、地板等,   
但是房子你是看不到全貌了。   
对于一个类的实例来说,   
你可以看到它的成员函数、成员变量,   
但是实例本身呢?   
this是一个指针,它时时刻刻指向你这个实例本身

二、this指针的特点

  • this指针的类型:类类型* const,即成员函数中,不能给this指针赋值
  • 只能在“成员函数”的内部使用 
  • this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针 
  • this指针是“成员函数”第一个隐含的指针形参,通常this指针在系统中是隐含存在的,也可以把它显式表示出来 
  • 非静态成员函数中可以直接使用this来代表指向该函数作用对象的指针,静态成员函数中不能使用this指针,因为静态成员函数并不具体作用与某个对象,因此,静态成员函数真实的参数的个数,就是程序中写出的参数个数 

(一)本质

(二)应用

1. 不使用this指针

#include<iostream>
using namespace std;
class A
{
private:
	int i;
public:
	void set(int x)
	{
		i = x;
	}
	int get()
	{
		return i;
	}
};

int main()
{
	A a;
	a.set(9);
	cout << a.get() << endl;
	return 0;
}

2. 使用this指针

#include<iostream>
using namespace std;
class A
{
private:
	int i;
public:
	void set(int x)//给私有成员变量i赋值
	{
		this->i = x;//this指针指向的是当前对象(所谓当前对象就是,谁此时调用set函数,谁就是当前对象)
		cout << "this指针保存的内存地址为:" << this << endl;
	}
	int get()
	{
		return i;
	}
};

int main()
{
	A a;
	a.set(9);//对象a调用set()函数给自己的成员变量i赋值
	cout << "对象a所在的内存地址为:" << &a << endl;
	cout << "对象a所保存的值为:" << a.get() << endl;
	cout << endl;

	A b;
	b.set(999);
	cout << "对象b所在内存地址为:" << &b << endl;
	cout << "对象b所保存的地址为:" << b.get() << endl;
}

 

3. 两者代码对比

三、代码举例

1. 举例1 

#include<iostream>
using namespace std;
class Box
{
private:
	double length;//长
	double breadth;//宽
	double height;//高
public:
	Box(double l = 2.0, double b = 2.0, double h =2.0)
	{
		cout << "Constructor called" << endl;
		length = l;
		breadth = b;
		height = h;
	}
	double Volume()//体积
	{
		return length * breadth * height;
	}
	int compare(Box box)//比较
	{
		return this->Volume() > box.Volume();
	}
};

int main()
{
	Box Box1(3.3, 1.2, 1.5);
	Box Box2(2.5, 6.0, 2.0);
	if (Box1.compare(Box2))//Box1调用的成员函数compare,所以this指针指向的是Box1
	{
		cout << "Box1 is bigger than Box2!" << endl;
	}
	else
	{
		cout << "Box1 is smaller or equal than Box2!" << endl;
	}
	return 0;
}

 

2. 举例2

代码举例2:
#include<iostream>
using namespace std;
class complex
{
	public:
		double real,imag;
		void print()
		{
			cout<<real<<","<<imag;
		}
		complex(double r,double i):real(r),imag(i)//初始化列表,complex接收传进来的两个数r和i,
		//将r传给real,将i传给img 
		{
			;
		}
		complex addone()
		{
			this->real++;//等价于real++ 
			this->print();//等价于print 
			return *this;//this指针指向了调用addone()函数的对象 
		}
};
int main()
{
	complex c1(1,1);
	complex c2(0,0);
	c2=c1.addone();//c1.anddone会调用addone函数,this指向addone()函数所作用的对象c1,
	//导致c1的real加1,也就变成了2,然后this指向的print()函数所作用的对象c1,打印c1的real=2,imag=1 
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/333900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL面试题:SQL语句的基本语法

MySQL目录一、数据库入门1. 数据管理技术的三个阶段2. 关系型数据库与非关系型数据库3. 四大非关系型数据库a. 基于列的数据库&#xff08;column-oriented&#xff09;b. 键值对存储&#xff08;Key-Value Stores&#xff09;c. 文档存储&#xff08;Document Stores&#xff…

In Context Learning 相关分享

个人知乎详见 https://zhuanlan.zhihu.com/p/603650082/edit 1. 前言 随着大模型&#xff08;GPT3&#xff0c;Instruction GPT&#xff0c;ChatGPT&#xff09;的横空出世&#xff0c;如何更高效地提示大模型也成了学术界与工业界的关注&#xff0c;因此In-context learning…

ArcGIS API for JavaScript 4.15系列(3)——Dojo中的css样式操作

1、前言 前一篇博客介绍了Dojo中基础的dom操作方法&#xff0c;主要是针对html中的常用标签和属性进行操作。而一个优秀的线上网站自然也离不开css样式的从旁辅助。在实际开发过程中&#xff0c;我们经常会遇到需要动态修改css样式的问题&#xff0c;本文就来介绍一下如何在Do…

大数据框架之Hadoop:入门(一)大数据概论

第1章 大数据概论 1.1大数据概念 大数据(Big Data)&#xff1a;指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 主要解决&#xff…

【java基础】集合

集合 集合类位于java.util 包下&#xff0c;集合类又被称为容器 与数组的区别 数组的长度是固定的&#xff0c;集合的长度是可变的数组可以用来存放基本数据类型&#xff0c;集合存放引用类型&#xff0c;不能存放基本数据类型 如何选择 collection map 黄色的是接口&…

1.计算机基础-操作系统面试题—计算机系统概述、进程管理

本文目录如下&#xff1a;计算机基础-操作系统 面试题一、计算机系统概述CPU 内核态 和 用户态 的区别&#xff1f;从 用户态 切换到 内核态 的常见方法&#xff1a;二、进程管理线程 和 进程 的区别&#xff1f;协程 (goroutine) 和 线程的区别?进程有哪些状态&#xff1f;进…

day11_类中成员之变量

通过以前的学习&#xff0c;我们知道了成员变量是类的重要组成部分。对象的属性以变量形式存在&#xff0c;下面我们就来详解的学习一下类中的变量 成员变量 成员变量的分类 实例变量&#xff1a;没有static修饰&#xff0c;也叫对象属性&#xff0c;属于某个对象的&#xf…

Transformer位置编码图解

在语言中&#xff0c;单词的顺序及其在句子中的位置非常重要。 如果重新排列单词&#xff0c;整个句子的意思可能会发生变化。 在实施 NLP 解决方案时&#xff0c;循环神经网络具有处理序列顺序的内置机制。 然而&#xff0c;transformer 模型不使用递归或卷积&#xff0c;而是…

面试(七)为什么一般希望将析构函数定义为虚函数

class B { public:~B() // 基类析构函数不为虚函数{cout << "B::~B()" << endl;} };class D : public B { public:~D(){cout << "D::~D()" << endl;} };void Test(B* t) {delete t;t nullptr; }int main() {B *pb new B;Test…

TCP/IP网络编程——I/O 复用

完整版文章请参考&#xff1a; TCP/IP网络编程完整版文章 文章目录第 12 章 I/O 复用12.1 基于 I/O 复用的服务器端12.1.1 多进程服务端的缺点和解决方法12.1.2 理解复用12.1.3 复用技术在服务器端的应用12.2 理解 select 函数并实现服务端12.2.1 select 函数的功能和调用顺序1…

anaconda下pytorchCPU GUP安装及问题记录

1 pytorch安装&#xff08;CPU版本&#xff09; pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple2 torchvision、torchaudio、torchtext安装&#xff1a;解决ModuleNotFoundError: No module named ‘torchvision‘问题 &#xff08…

用“AI“挑选一件智慧礼物

在久违的烟火气回归之际&#xff0c;充满希望的生活可能就从精心挑选一件新年礼物开始。在罗列礼品清单时&#xff0c;你会想到 “数据”也是其中之一吗&#xff1f;事实上&#xff0c;几乎所有时下最受欢迎的带有“智能”一词的设备&#xff0c;都是由大量高质量的数据创建。我…

面试必问的CAS,你懂多少?

目录一.什么是CAS&#xff1f;二.CAS实现过程三.CAS的缺点1.循环时间长2.只能保证一个共享变量是原子操作3.ABA问题和解决方法四.拓展题1.i和i是原子性操作吗&#xff1f;2. i 不加lock和synchronized怎么保证原子性&#xff1f;一.什么是CAS&#xff1f; CAS(Compare And Swa…

uboot源码结构、配置、编译和移植

目录 一、uboot源码结构 1.1 uboot源码获取 1.2 uboot的特点 1.3 uboot源码结构 二、uboot配置与编译 2.1uboot配置 2.2 uboot编译 三、uboot移植 3.1添加board信息 3.2再次配置和编译 3.3添加三星加密引导程序 3.4添加调制代码&#xff08;点灯法&#xff09; 3.…

CMMI-结项管理

结项管理&#xff08;ProjectClosing Management, PCM&#xff09;是指在项目开发工作结束后&#xff0c;对项目的有形资产和无形资产进行清算&#xff1b;对项目进行综合评估&#xff1b;总结经验教训等。结项管理过程域是SPP模型的重要组成部分。本规范阐述了结项管理的规程&…

绘图软件推荐——Diagram Designer

目录 Diagram Designer安装 软件下载 软件图标 Diagram Designer应用 新建页面 工具栏简介 绘制多边形 创建并添加图形模板 图像导出 Diagram Designer安装 软件下载 在腾讯管家&#xff0c;软件管理中 &#xff0c;搜索 Diagram Designer 即可下载软件图标 Diagram Des…

lio-sam学习笔记(三)

前言&#xff1a; 对于lio-sam前端中图像投影和特征提取部分的学习。 一、imageProjection.cpp main函数&#xff1a; int main(int argc, char** argv) {ros::init(argc, argv, "lio_sam");ImageProjection IP;ROS_INFO("\033[1;32m----> Image Project…

训练营day17

110.平衡二叉树 力扣题目链接 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a;一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 返回 true 。 示…

GIS矢量图形多边形地块行政区发光,阴影发光特效实现

先来看下效果: 其实做到发光效果我们必须明白两件事: 1.必须有亮色作为发光色 2.必须有暗色作为衬托色 二者缺一不可 如果你仅仅用了亮色,那么效果是这样的: 注意哦,我使用的是同一个颜色哦,为什么这一次看起来就不是发光呢? 原因很简单,第二幅图我没有加衬托色 ,…

Java基础常见面试题(一)

基础概念与常识 Java 语言有哪些特点? 简单易学&#xff1b;面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff1b;平台无关性&#xff0c;平台无关性的具体表现在于&#xff0c;Java 是“一次编写&#xff0c;到处运行&#xff08;Write Once&…