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

C++进阶(二)

目录

1、Vector2D  默认构造、重载

2、char 深度理解

3、深度理解简单的类操作


1、Vector2D  默认构造、重载

#include <iostream>
#include <cmath>class Vector2D {
private:double x; // X坐标double y; // Y坐标public:// 默认构造函数,将向量初始化为(0,0)Vector2D() : x(0), y(0) {}// 带有两个参数的构造函数,用于初始化向量的x和y坐标Vector2D(double x, double y) : x(x), y(y) {}// 计算向量的长度double length() const {return std::sqrt(x * x + y * y);}// 重载+运算符,用于向量的加法Vector2D operator+(const Vector2D& other) const {return Vector2D(x + other.x, y + other.y);}// 打印向量的坐标void print() const {std::cout << "(" << x << ", " << y << ")" << std::endl;}
};int main() {Vector2D v1(3, 4);Vector2D v2(1, 2);Vector2D v3 = v1 + v2;v3.print(); // 输出:(4, 6)return 0;
}

2、char 深度理解

背景

char* outex()
{char szP[32] = "helllo";return szP;
} 我理解是 szP的栈空间应该是被释放了 那么 return的时候 是把内容复制到返回值了?然后再释放的?
您的理解是正确的,`szP` 在 `outex` 函数中是一个栈上的局部变量。当函数返回时,这块栈空间会被标记为可以重用,但是不会立即被清零或释放。然而,返回一个栈上局部变量的指针是危险的,因为这块内存随时都可能被其他函数调用或其他局部变量覆盖,导致不确定的行为。当您执行以下代码:```cpp
char* ptr = outex();
```您得到的 `ptr` 实际上是指向一个已经不再保证其内容的内存区域。这块内存很快就可能被其他操作覆盖。要修复这个问题,有以下几种常见方法:1. **静态存储**:使变量静态,这样它的生命周期会持续到程序结束。```cppchar* outex() {static char szP[32] = "hello";return szP;}```注意:这种方法使得每次调用 `outex` 都返回相同的内存地址,所以如果您修改这块内存的内容,将影响所有引用该地址的地方。2. **动态内存分配**:使用 `new` (或 `malloc` 在 C 中)为字符串分配堆内存。```cppchar* outex() {char* szP = new char[32];strcpy(szP, "hello");return szP;}```如果使用这种方法,您必须确保在使用完返回的指针后使用 `delete[]` (或 `free` 在 C 中)来释放分配的内存,以避免内存泄漏。3. **使用 C++ 标准库的字符串**:这是一个更现代和安全的方法。```cppstd::string outex() {return "hello";}```在大多数情况下,推荐使用第三种方法,因为它最简单、安全。

3、深度理解简单的类操作

#include <iostream>class SimpleClass {
private:int value;public:SimpleClass(int v) : value(v) {}int getValue() const {return value;}void setValue(int v) {value = v;}
};int main() {SimpleClass obj(5);std::cout << "Initial value: " << obj.getValue() << std::endl;obj.setValue(10);std::cout << "Updated value: " << obj.getValue() << std::endl;return 0;
}
这个程序首先定义了一个名为`SimpleClass`的类,然后在`main`函数中实例化并使用该类。下面是其深层次的工作原理:1. **内存模型**:  当`SimpleClass obj(5);`这行代码执行时,编译器在栈上为`SimpleClass`对象分配内存。这意味着`obj`对象的生命周期限制在其声明的作用域内,一旦离开这个作用域(例如`main`函数结束时),对象就会被销毁。2. **构造函数**:  `SimpleClass(int v) : value(v) {}`是一个带有一个整数参数的构造函数。在构造函数的初始化列表中,我们直接将成员变量`value`初始化为参数`v`的值。3. **成员函数**:  `getValue`和`setValue`是访问器函数,它们允许我们访问和修改私有成员`value`。4. **数据封装**:  通过将`value`设为`private`,我们确保了它不能直接从类外部访问或修改。这是面向对象编程的基本原则之一,称为封装。5. **输入/输出流**:  `std::cout`是C++的一个输出流对象,它用于将文本发送到标准输出(通常是屏幕)。`<<`操作符被重载,以便可以与`std::cout`和其他类型的数据一起使用,从而提供连续的输出操作。6. **返回值**:  `main`函数的返回值通常指示程序的退出状态。返回0通常表示程序成功完成。编译和运行该程序会输出:
```
Initial value: 5
Updated value: 10
```当你编译这段代码时,编译器会执行许多任务,包括但不限于:词法分析、语法分析、语义分析、优化和代码生成。然后链接器接手,解析库依赖关系,并生成可执行文件。

相关文章:

C++进阶(二)

目录 1、Vector2D 默认构造、重载 2、char 深度理解 3、深度理解简单的类操作 1、Vector2D 默认构造、重载 #include <iostream> #include <cmath>class Vector2D { private:double x; // X坐标double y; // Y坐标public:// 默认构造函数&#xff0c;将向量初…...

zoneinfo

在Linux系统中&#xff0c;zoneinfo是一个包含了世界各地时区信息的目录&#xff0c;通常位于/usr/share/zoneinfo。这个目录下的子目录和文件名对应了各个时区的名称。例如&#xff0c;/usr/share/zoneinfo/America/Los_Angeles文件就包含了美国洛杉矶的时区信息。 你可以通过…...

基于微信小程序的实验室预约管理系统设计与实现

前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb;…...

腾讯mini项目-【指标监控服务重构】2023-08-17

今日已办 定位昨日发现的问题 来回测试发现依然出现该问题 将 pub/sub 的库替换为原来官方基于 sarama 的实现&#xff0c;发现问题解决了&#xff0c;所以问题的根本是 kafkago 这个库本身存在问题 依据官方的实现&#xff0c;尝试自定义实现 pub/sub sarama 与 kafka-go …...

前端需要知道的计算机网络知识----网络安全,自学网络安全,学习路线图必不可少,【282G】初级网络安全学习资源分享!

网络安全&#xff08;英语&#xff1a;network security&#xff09;包含网络设备安全、网络信息安全、网络软件安全。 黑客通过基于网络的入侵来达到窃取敏感信息的目的&#xff0c;也有人以基于网络的攻击见长&#xff0c;被人收买通过网络来攻击商业竞争对手企业&#xff0…...

#循循渐进学51单片机#定时器与数码管#not.4

1、熟练掌握单片机定时器的原理和应用方法。 1&#xff09;时钟周期&#xff1a;单片机时序中的最小单位&#xff0c;具体计算的方法就是时钟源分之一。 2&#xff09;机器周期&#xff1a;我们的单片机完成一个操作的最短时间。 3)定时器&#xff1a;打开定时器“储存寄存器…...

基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(五)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 数据增强3. 模型构建4. 模型训练及保存5. 模型评估6. 模型测试 系统测试1. 训练准确率2. 测试效果3. 模型应用1&#xff09;程序下载运行2&#xff09;应用使用说明3&#xff09;测试结果 相关其它…...

Linux: Cache 简介

文章目录 1. 前言2. 背景3. Cache 硬件基础3.1 什么是 Cache &#xff1f;3.2 Cache 工作原理3.3 Cache 层级架构3.4 内存架构中各级访问速度概览3.5 Cache 分类3.6 Cache 的 查找 和 组织方式3.6.1 Cache 组织相关术语3.6.2 Cache 查找3.6.2.1 Cache 查找过程概述3.6.2.2 Cach…...

常见位运算公式使用场景

判断奇偶性&#xff1a;数值 x 为偶数当且仅当 (x & 1) 0。数值 x 为奇数当且仅当 (x & 1) 1。 交换两个数&#xff1a;使用异或操作符 ^ 进行交换。假设有变量 a 和 b&#xff0c;则可以使用以下公式交换它们的值&#xff1a; a a ^ b; b a ^ b; a a ^ b;取绝…...

virtualbox配置ubuntu1804虚拟机相关流程

virtualbox配置ubuntu1804虚拟机相关流程 相关版本能解决的问题安装流程1&#xff1a;新建虚拟机安装流程2&#xff1a;配置虚拟机安装流程3&#xff1a;安装虚拟机系统安装流程4&#xff1a;设置ubuntu 相关版本 virtualbox使用VirtualBox官网下载的6.1.34 r150636 版。ubunt…...

防火墙基本概念

思维导图 1. 什么是防火墙&#xff1f; 网络在远古时期没有防火墙大家都是联通的&#xff0c;any to any&#xff0c;没有防火墙的时代就相当于没有门的房子&#xff0c; 没有城墙的城市。 路由器与交换机的本质是转发&#xff0c;防火墙的本质是控制和防护。 防火墙&#xff…...

易点易动固定资产管理平台:打通BMP,实现高效流程管理与全生命周期管理

在现代企业管理中&#xff0c;固定资产的流程管理和全生命周期管理是提高效率和降低成本的关键。易点易动固定资产管理平台通过打通BMP&#xff08;Business Process Management&#xff09;系统&#xff0c;实现了固定资产流程管理和全生命周期高效化管理的目标。本文将详细介…...

uniapp webview实现双向通信

需求&#xff1a;uniapp webview嵌套一个h5 实现双向通信 uniapp 代码 <template><view><web-view src"http://192.168.3.150:9003/" message"onMessage"></web-view></view> </template><script>export defau…...

Linux动态库

定义&#xff1a;动态函数库&#xff0c;是在程序执行时动态&#xff08;临时&#xff09;由目标程序去调用 优点&#xff1a; 调用时不复制&#xff0c;程序运行时动态加载到内存&#xff0c;供程序调用&#xff0c;系统只加载一次&#xff0c;多个程序可以共用&#xff0c;…...

ESP-IDF学习——1.环境安装与hello-world

ESP-IDF学习——1.环境安装与hello-world 0.前言一、环境搭建1.官方IDE工具2.vscode图形化配置 二、示例工程三、自定义工程四、点灯五、总结 0.前言 最近在学习freertos&#xff0c;但由于买的书还没到&#xff0c;所以先捣鼓捣鼓ESP-IDF&#xff0c;因为这个比Arduino更接近底…...

【算法】二分答案

文章目录 相关链接什么时候使用二分答案&#xff1f;题目列表最大化最小化相关题目列表&#x1f4d5;2439. 最小化数组中的最大值解法1——二分答案解法2——分类讨论O(n) 2513. 最小化两个数组中的最大值&#xff08;二分答案lcm容斥原理&#xff09;&#x1f402;好题&#x…...

阿曼市场最全开发攻略,看这一篇就够了

中东是一个充满外贸机遇的市场&#xff0c;已经成为很多外贸人重点开发的市场。 阿曼的海岸南方和东方临阿拉伯海&#xff0c;东北方则抵阿曼湾。阿曼因为扼守着世界上最重要的石油输出通道——波斯湾和阿曼湾之间的霍尔木兹海峡&#xff0c;所以地理位置非常重要&#xff0c;…...

探讨UUID和Secrets:确保唯一性与数据安全的利器

&#x1f600;前言 在现代软件开发中&#xff0c;唯一标识符&#xff08;UUID&#xff09;和机密信息的处理是至关重要的。UUID是用于唯一标识数据记录和对象的128位值&#xff0c;确保了全球范围内的唯一性。同时&#xff0c;Python的secrets模块为处理机密信息提供了强大的随…...

06-Redis缓存高可用集群

上一篇&#xff1a;05-Redis高可用集群之水平扩展 1.集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态&#xff0c;如果master节点异常&#xff0c;则会做主从切换&#xff0c;将某一台slave作为master&#xff0c…...

LCP 18.早餐组合

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;LCP 18. 早餐组合 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 按序遍历饮料数组&#xff0c;二分查找符合要求 staple 中满足要求的最大值所在位置。最后返回所有*&#xff08;最大位置…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...