[C/C++]对象指针

news2024/11/17 9:36:58

对象指针

1.对象指针变量

和基本类型变量一样,对象在初始化之后也会在内存中占有若干字节的内存空间。因此在程序中,我们可以通过对象名或对象的地址来访问该对象。对象指针变量就是一个用于保存对象在内存中存储空间首地址的指针变量,它与普通数据类型的指针变量有相同的性质。

声明对象指针变量的语法格式为:

类名 *对象指针名;

例如,声明exam类的对象指针obp;

exam *obp;

对象指针声明后,需要先赋值(使它指向一个对象)后使用。取得一个对象在内存中首地址的方法与取得一个变量在内存中首地址的方法一样,都是通过取地址运算符"&";例如:

exam ob;
exam *obp;
*obp = &ob;

最后的赋值表达式表示表达式&取对象ob在内存中的首地址并赋值给指针变量obp,指针变量obp指向ob在内存中的首地址。
对象指针变量赋值后,我们就可以通过该指针来访问它所指向的对象的成员。使用对象指针访问对象成员的语法形式为:

对象指针名->成员名;

对象数组的每个元素都是一个对象,都有地址,我们也可以使用对象指针指向对象数组的元素。使用方式和上面所述指向对象的指针变量类似。
case 1:用对象指针引用单个对象成员

#include <iostream>
using namespace std;

class A{
	private:
		int x;
	public:
		void set_x(int a){
			x = a;
		}
		void show_x(){
			cout<<x<<endl;
		}
};
int main(void)
{
	A *ptr,ptr1;
	ptr1.set_x(2);
	ptr1.show_x();
	ptr = &ptr1;
	ptr->show_x();
	
	return 0;
}

运行结果如下:
20230119_4
case 2:用对象指针引用对象数组

#include <iostream>
using namespace std;

class A{
	private:
		int x;
	public:
		void set_x(int a){
			x = a;
		}
		void show_x(){
			cout<<x<<endl;
		}
};
int main(void)
{
	A *ptr,ptr1[2];
	ptr1[0].set_x(12);
	ptr1[1].set_x(22);
	ptr = ptr1;
	ptr->show_x();
	ptr++;
	ptr->show_x();
	
	return 0;
}

运行结果如下:
20230119_5

2.this指针
this指针是系统自动生成的,隐含于每个对象中的指针。
当一个对象生成后,系统就为这个对象定义了一个this指针,它指向这个对象的地址。

也就是说,每一个成员函数都有一个this指针,当对象调用成员函数时,该成员函数的this指针便指向这个对象。
这样,当不同的对象调用同一个成员函数时,编译器将根据该成员函数的this指针指向的对象确定引用那个对象的成员函数。成员函数访问类中数据成员的形式为:

> this->成员变量

主要应用场景: 成员函数中需要把对象本身作为参数传递给另一个函数的时候
case 3:this指针作用的例子

#include <iostream>
using namespace std;

class sample{
	private:
	int n;
	public:
	sample(int m){
		n = m;
	}
	void add(int m){
		sample q(0);
		q.n = n+m;
		*this = q;
	}
	void disp(){
		cout<<"n = "<<n<<endl;
	}
}
int main(void)
{
	sample p(10);
	p.disp();
	p.add(10);
	p.disp();

	return 0;
}

运行结果如下:
20230119_6

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

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

相关文章

Python Matplotlib 中如何用 plt.savefig 存储图片

目录前言正文前言 plt.show()展示图片的时候&#xff0c;截图进行保存&#xff0c;图片不是多么清晰 如何保存高清图也是一知识点 函数包名&#xff1a;import matplotlib.pyplot as plt 正文 主要功能&#xff1a;保存绘制数据后创建的图形。使用此方法可以将创建的图形保…

MobaXterm的安装与使用

安装: 分为开箱即用和逐步配置版本,这里选择开箱即用的版本,网址如下: MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Home EditionFree X server for Windows with tabbed SSH terminal, telnet, RDP, VNC and X11-forwarding - Home Editionhttps://mobaxterm.m…

Java面试题(2),这是一篇会一直更新的博客!欢迎大家留言~

Java面试题第二篇1. 并发的三大特性2、线程池、解释线程池参数3、BeanFactory和ApplicationContext有什么区别&#xff1f;4、描述一下Spring Bean的生命周期5、Spring的几种Bean的作用域6、单例Bean是线程安全的吗&#xff1f;7、Spring框架用到了哪些设计模式8、Spring事务的…

Magic Leap CEO:我们的目标是再回到消费级AR市场

相比于几年前&#xff0c;Magic Leap在CEO换人后经历了一系列变化&#xff0c;其中更明显的变化&#xff0c;就是这家公司似乎变得更低调、更务实。此前&#xff0c;Magic Leap的内容库包括了大量趣味、娱乐的AR应用&#xff0c;而现在则主要改成B端解决方案&#xff0c;随着ML…

小程序商城源码代码分析

微信平台开发直播插件后&#xff0c;许多传统的商家开始加入小程序商城源码开发的队伍中&#xff0c;以此来自主管理自己的产品。下文&#xff0c;小编将为大家盘点一下小程序商城源码的优势&#xff0c;以及代码分析。 一、小程序商城源码有什么优势&#xff1f; 1、拓展私域…

定时任务中将redis数据存入数据库相关问题

我的GitHub&#xff1a;Powerveil GitHub我的Gitee&#xff1a;Powercs12 (powercs12) - Gitee.com皮卡丘每天学Java觉得昨天晚上只是分析和解决问题&#xff0c;很多人可能不知道出bug的场景&#xff0c;今天决定重现bug&#xff0c;让代码改回错误代码&#xff0c;重现看到一…

科研快报|PacBio 16S全长测序探究游离唾液微生物群失调在牙周病中的潜在作用

背景介绍唾液是口腔中最重要的介质。唾液中游离细菌的生态失调可能与牙周病的发生、发展、预后和复发有关&#xff0c;但这种潜在的关系尚不清楚。本研究的目的是探讨游离唾液微生物群在不同牙周状态下的潜在作用&#xff0c;它们对非手术牙周治疗的反应&#xff0c;以及治疗后…

年后旺季,服装实体店如何利用微信做新款宣传?

每年过完大年开工后&#xff0c;我们服装的旺季就来临了&#xff0c;对于很多服装店铺来说&#xff0c;无疑是一个必须把握的大好机会。就拿这几天的天气来说&#xff0c;广东最高温度达到了26度&#xff0c;很多人又把自己春夏的衣服拿出来了&#xff0c;而年后气温必然回暖&a…

Swin Transformer代码实战篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;往期回顾&#xff1a;CV攻城狮入门VIT(vision transformer)之旅——近年超火的Transformer你再不了解就晚了&#xff01; CV攻城狮入门VIT(vision transformer)之旅——VIT原…

列表元素 有序列表 无序列表 定义列表 ol: ul: dl: dd: dt:

目录列表元素有序列表无序列表定义列表列表元素 有序列表 ol: ordered list 表示整个列表 li: list item 表示单个列表&#xff0c;列表的子元素 reversed: 导则 列表的写法&#xff1a; 但实际开发中一般不用type来设置列表的序&#xff0c;而是用css 把大象装冰箱分几步…

SpringBoot 项目

不得不佩服 Spring Boot 的生态如此强大&#xff0c;今天我给大家推荐几款 Gitee 上优秀的后台开源版本的管理系统&#xff0c;小伙伴们再也不用从头到尾撸一个项目了&#xff0c;简直就是接私活&#xff0c;挣钱的利器啊。SmartAdmin我们开源一套漂亮的代码和一套整洁的代码规…

2.4、进程通信

整体框架 1、什么是进程通信&#xff1f; 顾名思义&#xff0c;进程通信就是指进程之间的信息交换。 进程是分配系统资源的单位&#xff08;包括内存地址空间)&#xff0c; 因此各进程\color{red}各进程各进程拥有的内存地址空间相互独立\color{red}内存地址空间相互独立内存…

知识分享-商业数据分析业务全流程

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

力扣sql简单篇练习(二)

力扣sql简单篇练习(二) 1 从不订购的客户 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 一个人也是有可能下多个订单的 SELECT name Customers FROM Customers WHERE id not in(SELECT distinct Customerid FROM Orders)1.3 运行截图 2 删除重…

【LINUX修行之路】工具篇——Vim的使用及配置

&#x1f37f;本节主题&#xff1a;vim的使用 &#x1f388;推荐阅读&#xff1a;回溯算法 、C入门&#xff08;上篇&#xff09; &#x1f495;我的主页&#xff1a;蓝色学者的主页 文章目录一、前言二、文本编辑器和IDE三、选择vim的理由四、vim操作模式4.1普通模式(command …

springboot项目实现腾讯云的短信验证

前言&#xff1a;可以先去看下腾讯云开通短息服务需要哪些信息。我这里使用自己很久之前申请过的公众号&#xff0c;其他的比如网站&#xff0c;小程序啥的也没有&#xff0c;哈哈哈~。 腾讯云地址&#xff1a; https://console.cloud.tencent.com/smsv2/csms-sign/create接下…

非父子组件的通信

在开发中&#xff0c;我们构建了组件树之后&#xff0c;除了父子组件之间的通信之外&#xff0c;还会有非父子组件之间的通信。这里我们主要讲两种方式&#xff1a; Provide/Inject&#xff1b;全局事件总线&#xff1b; 1、Provide和Inject Provide/Inject用于非父子组件之间…

什么是OAuth2

2.3 什么是OAuth2 2.3.1 OAuth2认证流程 在前边我们提到微信扫码认证&#xff0c;这是一种第三方认证的方式&#xff0c;这种认证方式是基于OAuth2协议实现&#xff0c; OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时&#xff0c;任何第三方都可以使…

离散数学-图论-图的基本概念(11)

图的基本概念 1 图 1.1 图的定义 定义1&#xff1a; 一个无向图G是一个有序的二元组<V,E>&#xff0c;其中 &#xff08;1&#xff09;V是一个非空有穷集&#xff0c;称为顶点集&#xff0c;其元素称为顶点或结点。 &#xff08;2&#xff09;E是无序积V&V的有穷多…

什么是安卓版 UI 业务包 SDK?如何接入?

涂鸦 Android 业务包是指包含业务逻辑和 UI 界面的涂鸦垂直业务模块&#xff0c;旨在为基于涂鸦智能生活 SDK 开发的应用提供快速的一站式接入涂鸦业务模块的能力。 概述 目前提供的业务包种类繁多&#xff0c;例如&#xff1a; H5 商城设备配网设备控制IP 摄像机智能场景常…