Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【C++】C++ 类中的 this 指针用法 ① ( C++ 类中的 this 指针引入 | this 指针用法 | 代码示例 )

【C++】C++ 类中的 this 指针用法 ① ( C++ 类中的 this 指针引入 | this 指针用法 | 代码示例 )

作者头像
韩曙亮
发布于 2023-10-15 09:18:11
发布于 2023-10-15 09:18:11
74600
代码可运行
举报
运行总次数:0
代码可运行

一、C++ 类中的 this 指针

1、C++ 类中的 this 指针引入

在 C++ 类中 , this 指针 是一个特殊的指针 , 由系统自动生成 , 不需要手动声明定义 , 在类中的每个 非静态成员函数 中 , 都可以调用 this 指针 ;

this 指针 是指向 调用对象 自身 的指针 , 也就是调用 该成员函数 的 实例对象 的 内存地址 ;

由于 this 指针只能在 非静态成员函数内部使用 , 因此 this 指针是类内部使用的指针 , 使用 this 可以访问 实例对象 中 的所有 公有 public / 保护 protected / 私有 private 成员 ;

2、C++ 类中的 this 指针用法

C++ 类中的 this 指针用法 :

  • 使用 this 作为指针 : 在 非静态成员函数 中 , 直接使用 this 作为 本实例对象 的指针 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this
  • 使用 this-> 访问成员变量 : 在 非静态成员函数 中 , 直接使用如下语法 , 访问 本实例对象 中的 非静态成员变量 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this->成员变量名
  • *使用 (this). 访问成员变量 : 在 非静态成员函数 中 , 直接使用如下语法 , 访问 本实例对象 中的 非静态成员变量 ; 先获取指针指向的数据 然后访问数据中的成员变量 ;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(*this).成员变量名

在 C++ 类中 , 定义了 成员变量 age 和 height , 在 构造函数 中进行初始化 , 可以使用 this-> age 访问 age 成员变量 , 使用 this->height 访问 height 成员变量 ;

在下面的代码中 , 参数名称也是 age 和 height , 与 成员变量名称重名了 , 使用 this 指针可以有效区分 函数参数 与 成员变量 重名的问题 ;

使用 代码 this->age = age; 为 age 变量赋值 , this->age 是成员变量 , age 是函数的参数 ;

示例代码 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Student
{
public:
	// 带参构造函数
	Student(int age, int height)
	{
		this->age = age;
		this->height = height;
		cout << "执行 Student 的构造函数" << endl;
	}

	void print() {
		// this 指针隐式传递
		std::cout << "age: " << age << std::endl;
		// 通过指针 访问成员变量
		std::cout << "this->age: " << this->age << std::endl;
		// 先获取指针指向的数据 然后访问数据中的成员变量
		std::cout << "(*this).age: " << (*this).age << std::endl;
	}

public:
	int age;		// 年龄
	int height;		// 身高
};

3、完整代码示例

在下面的代码中 ,

构造函数 Student(int age, int height) 的 参数名为 age 和 height ,

成员变量为 int age 和 int height ,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public:
	int age;		// 年龄
	int height;		// 身高

正好 , 成员变量名称 与 参数名相同 , 这里使用 this 关键字 , 可以解决名称冲突的问题 ;

代码示例 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include "iostream"
using namespace std;

class Student
{
public:
	// 带参构造函数
	Student(int age, int height)
	{
		this->age = age;
		this->height = height;
		cout << "执行 Student 的构造函数" << endl;
	}

	~Student()
	{
		cout << "执行 Student 的析构函数" << endl;
	}

	void print() {
		// this 指针隐式传递
		std::cout << "age: " << age << std::endl;
		// 通过指针 访问成员变量
		std::cout << "this->age: " << this->age << std::endl;
		// 先获取指针指向的数据 然后访问数据中的成员变量
		std::cout << "(*this).age: " << (*this).age << std::endl;
	}

public:
	int age;		// 年龄
	int height;		// 身高
};

int main() {
	
	// 调用有参构造函数 创建 Student 实例对象
	Student s(18, 180);

	cout<< "s.age" << s.age << " , s.height" << s.height << endl;

	s.print();
	

    // 控制台暂停 , 按任意键继续向后执行
    system("pause");

    return 0;
}

执行结果 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
执行 Student 的构造函数
s.age18 , s.height180
age: 18
this->age: 18
(*this).age: 18
请按任意键继续. . .
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )
在 C++ 类中 , 普通的非静态成员函数 , 可以使用 const 进行修饰 ,
韩曙亮
2023/10/15
5140
【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )
【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )
静态成员函数归属 : 在 C++ 类中 , 静态成员函数 是一种 特殊的函数 , 该函数属于类 , 而不是属于 类实例对象 ;
韩曙亮
2023/10/15
2.4K0
【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )
【C++】C++ 类中的 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )
C++ 编译器 , 在编译阶段会将 C++ 类的 成员函数 转为 全局函数 , 转换时 , 会 增加一个参数到参数列表开始为止 , 这个增加的参数是 对象本身的指针 ;
韩曙亮
2023/10/15
7160
【C++】C++ 类中的 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )
this指针的介绍和用法
this指针是面向对象程序设计的一项概念,在C++中,它表示当前运行的对象。在实现对象的方法时,this指针来获得该对象自身的引用。
全栈程序员站长
2022/08/29
5720
this指针的介绍和用法
C++基础知识精髓
例程中声明一个命名空间Test,Test中声明一个结构体Account,而Account中定义变量和声明函数。
Linux兵工厂
2023/02/28
2.1K0
C++基础知识精髓
类和对象(万字总结!深度总结了类的相关知识)(上)
为什么C++要学习类?学习C++中的类是掌握面向对象编程的关键。类提供了将数据与操作封装在一起的结构化方式,帮助开发者解决复杂问题、提高代码的可重用性和安全性。通过类的继承、封装、多态,可以更灵活地设计和扩展程序,同时模拟现实世界中的对象和行为,提升代码的可维护性和效率。掌握类有助于编写高效、清晰的代码,并应对复杂的软件系统设计。下面就由我来带大家深度剖析一下类和对象的真正奥秘…
suye
2024/10/16
1750
面向对象之this指针与类中的枚举类型
相信在坐的很多人,都在学Python,对于Python来说有self,类比到C++中就是this指针,那么下面一起来深入分析this指针在类中的使用!
公众号guangcity
2019/09/20
1.3K0
面向对象之this指针与类中的枚举类型
this指针小总结
在C++中,this指针是一个隐式的、非静态的成员指针,它指向调用它的对象的地址。每个非静态成员函数都含有一个this指针,该指针在成员函数中用于访问调用它的对象的成员。
ljw695
2024/10/18
1490
8.3 C++ 定义并使用类
C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。
王 瑞
2023/10/21
2640
8.3 C++ 定义并使用类
C++深拷贝与浅拷贝,初始化列表,对象成员,静态成员相关分析
使用new创建堆区数据,需要人为释放,new出来的东西是等到整个进程结束了才会自动释放。如果这个对象已经销毁,而这个类里没有析构函数却恰恰有个指针,自动释放的是栈区的变量,而不是堆区的,那么这个地址就没有指针指向它,就造成了内存泄漏。
CtrlX
2022/08/10
9421
C++深拷贝与浅拷贝,初始化列表,对象成员,静态成员相关分析
c++之this指针
this指针指向被调用的成员函数所属的对象。 this指针是隐含每一个非静态成员函数内的一种指针。 this指针不需要定义,直接使用即可。 用途: 当函数的形参和成员变量名重名时,可以用this进行区分。 在类的非静态成员函数中返回对象本身,可使用return *this。 #include<iostream> using namespace std; class Person { public: int age; void setAge(int age) { this->a
西西嘛呦
2020/08/26
4130
C++对象模型和this指针详解
这篇文章主要介绍了详解C++对象模型和this指针,是C++入门学习中的基础知识,需要的朋友可以参考下,希望能够给你带来帮助
米米素材网
2022/07/24
2760
C++对象模型和this指针详解
C++学习————第四天(类、this指针)
C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
IsLand1314
2024/10/15
1460
C++学习————第四天(类、this指针)
C++核心编程学习
包含常量区;主要是存放全局变量,静态变量,字符串常量,const修饰的全局变量, 不包括const修饰的局部变量(区域的数据在程序结束后由操作系统释放)
买唯送忧
2021/09/11
4180
【C++掌中宝】类和对象(二):隐藏的this指针
在 C++ 编程中,类是面向对象编程的核心,而类中的成员函数与对象的交互则通过一个隐含的指针来实现,这就是 this 指针。它在 C++ 类的非静态成员函数中自动存在并指向调用该函数的对象实例。在这篇文章中,我们将详细探讨 this 指针的定义、用法以及其背后的工作原理。
Crossoads
2024/10/22
1810
C/C++ 类与构造析构等知识
构造/析构 函数: 构造函数与类名相同,没有返回值,不写void,可以发生重载,可以有参数
王 瑞
2022/12/28
4740
【C++】C++核心编程部分-内存分区模型-引用-函数提高-类与对象-文件操作
相关视频——黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难_哔哩哔哩_bilibili(84-146)
半生瓜的blog
2023/05/12
1.9K0
【C++】C++核心编程部分-内存分区模型-引用-函数提高-类与对象-文件操作
C++的this指针
当你进入一个房子后, 你可以看见桌子、椅子、地板等, 但是房子你是看不到全貌了。 对于一个类的实例来说, 你可以看到它的成员函数、成员变量, 但是实例本身呢? this是一个指针,它时时刻刻指向你这个实例本身。
全栈程序员站长
2022/08/29
6530
【C++】运算符重载 ③ ( 二元运算符重载 | 运算符重载步骤 | 全局函数 实现 运算符重载 | 成员函数 实现 运算符重载 | 友元函数 实现 运算符重载 )
下面以 Student 类为例 , 编写 成员函数 / 全局函数 实现 运算符重载 代码 ;
韩曙亮
2023/10/15
3440
【C++】运算符重载 ③ ( 二元运算符重载 | 运算符重载步骤 | 全局函数 实现 运算符重载 | 成员函数 实现 运算符重载 | 友元函数 实现 运算符重载 )
C++面向对象程序设计
结论:C++推荐用引用技术,因为语法方便,引用本质是指针常量,但是所有的指针操作编译器都帮我们做了
浪漫主义狗
2022/09/28
1.3K0
推荐阅读
相关推荐
【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验