C++中->与.的区别
在类中
在 C++ 中,-> 和 . 都可以用于访问类的成员变量和成员函数。但它们在使用上有一些区别:
1. 对于指针类型的对象,必须使用 -> 来访问其成员;而对于非指针类型的对象,则需要使用 . 。
2. -> 运算符在实际使用时会先对指针进行解引用操作 (*p),然后再访问指针所指向对象的成员;而点运算符则是直接访问对象的成员。
例如,假设有一个名为 p 的指向某个对象的指针,该对象拥有一个名为 memVar 的成员变量和一个名为 memFunc 的成员函数,那么访问这些成员的方式如下:
p->memVar; // 访问 p 所指向对象的 memVar 成员变量
p->memFunc(); // 访问 p 所指向对象的 memFunc 成员函数(*p).memVar; // 与上面等效
(*p).memFunc(); // 与上面等效obj.memVar; // obj 是某个类的对象,访问该对象的 memVar 成员变量
obj.memFunc(); // 访问 obj 对象的 memFunc 成员函数
需要注意的是,在使用 -> 访问成员时,其左侧应当是一个指向对象的指针。否则会导致编译错误。
示例
#include<iostream>
class Myclass {
public:int number = 2;
};int main() {Myclass a;std::cout << "a.number = " << a.number << std::endl;Myclass* b = &a;std::cout << "(*b).number = " << (*b).number << std::endl;std::cout << "b->number = " << b->number << std::endl;
}
输出结果:
a.number = 2
(*b).number = 2
b->number = 2
分析:
这段代码创建了一个名为 Myclass
的类,其中包含一个公有成员变量 number,
其 number
成员变量的值设置为 2。在 main
函数中,首先创建了一个 Myclass
类的实例 a,通过a.number访问number成员变量
。然后,创建了一个指向 a
的指针 b
,使用 (*b).number
和 b->number
分别访问了 number
成员变量,并进行打印输出。
在结构体中
在 C++ 中,结构体和类的使用方式是相似的。对于结构体,也可以使用 -> 和 . 来访问其成员变量和成员函数,但它们的区别与前面提到的指针和非指针类型的对象的区别是一样的。
当使用指向结构体的指针时,需要使用 -> 运算符来访问成员;而对于结构体的实例(非指针类型),则需要使用 . 运算符。
例如,假设有一个名为 p 的指向结构体的指针,该结构体拥有一个成员变量 memVar 和一个成员函数 memFunc,那么访问这些成员的方式如下:
p->memVar; // 访问 p 所指向结构体的 memVar 成员变量
p->memFunc(); // 访问 p 所指向结构体的 memFunc 成员函数(*p).memVar; // 与上面等效
(*p).memFunc(); // 与上面等效obj.memVar; // obj 是某个结构体的实例,访问该实例的 memVar 成员变量
obj.memFunc(); // 访问 obj 实例的 memFunc 成员函数
需要注意的是,使用 -> 访问结构体成员时,左侧需要是一个指向结构体的指针。如果左侧不是指针类型或者是空指针,将导致编译错误。而使用 . 访问结构体成员时,左侧应当是一个结构体的实例。
示例
#include<iostream>
struct people{int number = 10;char str = 'h';
};int main() {people a; // 创建结构体实例std::cout << "a.number = " << a.number << std::endl;std::cout << "a.str = " << a.str << std::endl;people* b = &a; // 创建指向该实例的指针,该指针指向结构体实例a// std::cout << b.number << std::endl; // 编译报错// std::cout << b.str << std::endl; // 编译报错std::cout << "b->number = " << b->number << std::endl;std::cout << "b->str = " << b->str << std::endl;std::cout << "(*b).number = " << (*b).number << std::endl;std::cout << "(*b).str = " << (*b).str << std::endl;}
输出结果:
在上面的代码中,a是一个结构体实例,通过a.number、a.str,我们可以访问结构体实例a中的number、str成员变量。
b 是一个指向 people 类型的指针,它指向名为 a 的结构体实例。通过 (*b).number、b->number;
(*b).str、b->str
,我们可以访问结构体实例中名为 number、str的成员变量。
相关文章:

C++中->与.的区别
在类中 在 C 中,-> 和 . 都可以用于访问类的成员变量和成员函数。但它们在使用上有一些区别: 1. 对于指针类型的对象,必须使用 -> 来访问其成员;而对于非指针类型的对象,则需要使用 . 。 2. -> 运算符在实…...

大语言模型(LLM)综述(二):开发大语言模型的公开可用资源
A Survey of Large Language Models 前言3. RESOURCES OF LLMS3.1 公开可用的模型CheckPoints或 API3.2 常用语料库3.3 库资源 前言 随着人工智能和机器学习领域的迅速发展,语言模型已经从简单的词袋模型(Bag-of-Words)和N-gram模型演变为更…...

【vSphere 8 自签名证书】企业 CA 签名证书替换 vSphere Machine SSL 证书Ⅳ—— 替换默认证书
目录 博文摘要6. 使用企业 CA 签发的 SSL 证书 替换 vSphere 默认 SSL 证书6.1 确认证书文件6.2 替换默认 vSphere 证书6.3 验证自签名证书6.4 补充说明 关联博文参考资料 博文摘要 博文主要描述了在 vCenter Server 8 上通过实用工具 certificate-manager 将 vSphere 默认 Ma…...

NI9234 4 通道, ±5 V, 24 位软件可选 IEPE 和 AC/DC模拟输入模块振动测试国产替代
NI的自动化测试和测量系统将助您打破桎梏,化不可能为可能。让我们携手合作,选择最适合您的硬件、软件和服务组合,为您提供全副武装,助您成就非凡。 购买NI的产品或服务,并非只是单纯的一次性交易行为。如果您有任何疑…...

宁波市:做大做强跨境电商 赋能外贸创新发展
近日,全国政协第十四届常委会第二次会议专题研究“构建新发展格局,推进中国式现代化”议题,市政协主席徐宇宁参加“推动高水平对外开放”专题小组讨论,全国政协副主席蒋作君到会听取发言,国家发改委、商务部相关司局负…...

为什么这些网站都在使用CFCA证书
在今天的数字时代,保障数据的安全至关重要,尤其是对于金融机构、政府部门和大型企业等组织而言。证书颁发机构在这一领域扮演着关键的角色,而CFCA(中国金融认证中心)证书已经脱颖而出,展现了其与其他证书的…...

Java编程规范(命名规则),Java程序的运行过程(执行流程)分析
编程规范是对编程的一种约定,主要作用是增强代码的可读性和可维护性,便于代码重用。 首先要求程序中的各个要素都遵守命名规则,然后在编码中严格按照编码格式编写代码。命名规则包括以下几点。 包的名称由一个小写字母序列组成。类的名称由大…...

layui框架实战案例(21):layui table单元格显示图片导致复选框冗余的解决方案
图片自适应表格CSS 为防止单元格内的图片不能正常显示,需本地重写CSS。 /*layui-table图片自适应*/ .layui-table-cell {height: auto;line-height: 20px;}.layui-table-cell img {height: 50%;max-width: 50%; }列代码 , cols: [[{type: checkbox,fixed:left, w…...
指针常量和常量指针
大家好,我叫徐锦桐,个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家来访。 指针常量和常量指针光是这名字就让人头疼了。更何况还有细节问题要理清楚。 正文 命名 其实我…...

GitLab-访问返回403 forbidden问题处理
访问gitlab时报错forbidden 一般访问量大,密码错误频率高的时候,gitlab防爆机制启动了,对IP做了封禁,导致某些IP访问的是否返回 403 forbidden 1. 查看被封的IP /opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/red…...

快来get策略模式,告别编程困惑,轻松变身编程高手✨
🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 ⭐ 专栏简介 📘 文章引言 一…...

UPS负载箱的工作原理是什么?
UPS负载箱(Uninterruptible Power Supply Load Bank)内部包含一组电阻器,通过调节电阻值来模拟不同负载条件。当UPS供电时,电阻器会吸收一定的电能,从而模拟实际负载对UPS的需求。UPS负载箱配备了控制系统,…...
深度学习八股文: 模型训练全过程及各阶段的原因
深度学习模型的训练全过程通常包括以下步骤: 数据准备: 首先,需要准备用于训练的数据集。数据集应包含输入特征(通常是数值或图像数据)和相应的目标标签。数据通常需要被分为训练集、验证集和测试集,以便评…...
CY3-NHS ester良好的光稳定性介绍1032678-38-8
CY3-NHS ester通常表现出良好的光稳定性,这使得它在长时间的荧光成像和实验中非常有用。以下是关于CY3-NHS ester良好光稳定性的一些介绍: 1.抗光漂白性能:CY3-NHS ester通常对光漂白表现出相对高的抵抗力。这意味着在持续激发下,…...
大厂秋招真题【贪心】美团20230826秋招T2-小美的数组重排
文章目录 【贪心】美团2023秋招-小美的数组重排题目描述与示例题目描述输入描述输出描述示例输入输出 说明 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 【贪心】美团2023秋招-小美的数组重排 题目描述与示例 题目描述 小美有两个长度为n…...

UnitTest框架的使用
文章目录 一、UnitTest框架是什么?二、UnitTest核心要素三、TestCase四、TestSuite & TestRunner 一、UnitTest框架是什么? UnitTest框架是python自带的一个单元测试框架,主要用它来做单元测试,它有以下特点: 能…...

软件开发项目文档系列之四如何成功撰写一份引人注目的投标文件
目录 前言1 分析招标文件1.1 投标的基础要求分析1.2 投标重点要求分析1.3 评分标准分析1.4 技术需求分析 2 撰写完整的投标文件2.1 明确文件用途2.2 提供评分指引2.3 内容完整重点突出2.4 重视图表和图示 3 认真检查和经验积累3.1 深入的准备3.2 反复检查3.3 咨询和确认3.4 积累…...
Django设置跨域
1, 安装 pip install django-cors-headers 2, 添加应用 INSTALLED_APPS (...corsheaders,... ) 3, 中间层设置 MIDDLEWARE [corsheaders.middleware.CorsMiddleware,... ] 4, 添加白名单 # CORS CORS_ORIGIN_WHITELIST (127.0.0.1:8080,localhost:8080,www.meiduo.si…...

基于Python3的Scapy构造DNS报文
一:DNS协议 DNS(Domain Name System)协议是计算机网络中的一种基础协议,它用于将域名(如www.baidu.com)转换为IP地址(如192.168.0.1),从而实现计算机之间的通信。 DNS 分…...
Jupyter Notebook修改默认浏览器方法
Jupyter Notebook修改默认浏览器方法 Create a Jupyter Notebook Config file jupyter notebook --generate-config打开配置文件.jupyter/jupyter_notebook_config.py找到c.NotebookApp.browser 改成只向自己喜欢的浏览器路径’,这里给出选择google浏览器方法&…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...