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浏览器方法&…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
