当前位置: 首页 > news >正文

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).numberb->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 类型的指针,它指向名为 的结构体实例。通过 (*b).number、b->number; (*b).str、b->str,我们可以访问结构体实例中名为 number、str的成员变量。 

相关文章:

C++中->与.的区别

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

大语言模型(LLM)综述(二):开发大语言模型的公开可用资源

A Survey of Large Language Models 前言3. RESOURCES OF LLMS3.1 公开可用的模型CheckPoints或 API3.2 常用语料库3.3 库资源 前言 随着人工智能和机器学习领域的迅速发展&#xff0c;语言模型已经从简单的词袋模型&#xff08;Bag-of-Words&#xff09;和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的自动化测试和测量系统将助您打破桎梏&#xff0c;化不可能为可能。让我们携手合作&#xff0c;选择最适合您的硬件、软件和服务组合&#xff0c;为您提供全副武装&#xff0c;助您成就非凡。 购买NI的产品或服务&#xff0c;并非只是单纯的一次性交易行为。如果您有任何疑…...

宁波市:做大做强跨境电商 赋能外贸创新发展

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

为什么这些网站都在使用CFCA证书

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

Java编程规范(命名规则),Java程序的运行过程(执行流程)分析

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

layui框架实战案例(21):layui table单元格显示图片导致复选框冗余的解决方案

图片自适应表格CSS 为防止单元格内的图片不能正常显示&#xff0c;需本地重写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…...

指针常量和常量指针

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家来访。 指针常量和常量指针光是这名字就让人头疼了。更何况还有细节问题要理清楚。 正文 命名 其实我…...

GitLab-访问返回403 forbidden问题处理

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

快来get策略模式,告别编程困惑,轻松变身编程高手✨

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一…...

UPS负载箱的工作原理是什么?

UPS负载箱&#xff08;Uninterruptible Power Supply Load Bank&#xff09;内部包含一组电阻器&#xff0c;通过调节电阻值来模拟不同负载条件。当UPS供电时&#xff0c;电阻器会吸收一定的电能&#xff0c;从而模拟实际负载对UPS的需求。UPS负载箱配备了控制系统&#xff0c;…...

深度学习八股文: 模型训练全过程及各阶段的原因

深度学习模型的训练全过程通常包括以下步骤&#xff1a; 数据准备&#xff1a; 首先&#xff0c;需要准备用于训练的数据集。数据集应包含输入特征&#xff08;通常是数值或图像数据&#xff09;和相应的目标标签。数据通常需要被分为训练集、验证集和测试集&#xff0c;以便评…...

CY3-NHS ester良好的光稳定性介绍1032678-38-8

CY3-NHS ester通常表现出良好的光稳定性&#xff0c;这使得它在长时间的荧光成像和实验中非常有用。以下是关于CY3-NHS ester良好光稳定性的一些介绍&#xff1a; 1.抗光漂白性能&#xff1a;CY3-NHS ester通常对光漂白表现出相对高的抵抗力。这意味着在持续激发下&#xff0c…...

大厂秋招真题【贪心】美团20230826秋招T2-小美的数组重排

文章目录 【贪心】美团2023秋招-小美的数组重排题目描述与示例题目描述输入描述输出描述示例输入输出 说明 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 【贪心】美团2023秋招-小美的数组重排 题目描述与示例 题目描述 小美有两个长度为n…...

UnitTest框架的使用

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

软件开发项目文档系列之四如何成功撰写一份引人注目的投标文件

目录 前言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报文

一&#xff1a;DNS协议 DNS&#xff08;Domain Name System&#xff09;协议是计算机网络中的一种基础协议&#xff0c;它用于将域名&#xff08;如www.baidu.com&#xff09;转换为IP地址&#xff08;如192.168.0.1&#xff09;&#xff0c;从而实现计算机之间的通信。 DNS 分…...

Jupyter Notebook修改默认浏览器方法

Jupyter Notebook修改默认浏览器方法 Create a Jupyter Notebook Config file jupyter notebook --generate-config打开配置文件.jupyter/jupyter_notebook_config.py找到c.NotebookApp.browser 改成只向自己喜欢的浏览器路径’&#xff0c;这里给出选择google浏览器方法&…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...