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:// 默认构造函数,将向量初…...
zoneinfo
在Linux系统中,zoneinfo是一个包含了世界各地时区信息的目录,通常位于/usr/share/zoneinfo。这个目录下的子目录和文件名对应了各个时区的名称。例如,/usr/share/zoneinfo/America/Los_Angeles文件就包含了美国洛杉矶的时区信息。 你可以通过…...
基于微信小程序的实验室预约管理系统设计与实现
前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…...
腾讯mini项目-【指标监控服务重构】2023-08-17
今日已办 定位昨日发现的问题 来回测试发现依然出现该问题 将 pub/sub 的库替换为原来官方基于 sarama 的实现,发现问题解决了,所以问题的根本是 kafkago 这个库本身存在问题 依据官方的实现,尝试自定义实现 pub/sub sarama 与 kafka-go …...
前端需要知道的计算机网络知识----网络安全,自学网络安全,学习路线图必不可少,【282G】初级网络安全学习资源分享!
网络安全(英语:network security)包含网络设备安全、网络信息安全、网络软件安全。 黑客通过基于网络的入侵来达到窃取敏感信息的目的,也有人以基于网络的攻击见长,被人收买通过网络来攻击商业竞争对手企业࿰…...
#循循渐进学51单片机#定时器与数码管#not.4
1、熟练掌握单片机定时器的原理和应用方法。 1)时钟周期:单片机时序中的最小单位,具体计算的方法就是时钟源分之一。 2)机器周期:我们的单片机完成一个操作的最短时间。 3)定时器:打开定时器“储存寄存器…...
基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(五)
目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 数据增强3. 模型构建4. 模型训练及保存5. 模型评估6. 模型测试 系统测试1. 训练准确率2. 测试效果3. 模型应用1)程序下载运行2)应用使用说明3)测试结果 相关其它…...
Linux: Cache 简介
文章目录 1. 前言2. 背景3. Cache 硬件基础3.1 什么是 Cache ?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…...
常见位运算公式使用场景
判断奇偶性:数值 x 为偶数当且仅当 (x & 1) 0。数值 x 为奇数当且仅当 (x & 1) 1。 交换两个数:使用异或操作符 ^ 进行交换。假设有变量 a 和 b,则可以使用以下公式交换它们的值: a a ^ b; b a ^ b; a a ^ b;取绝…...
virtualbox配置ubuntu1804虚拟机相关流程
virtualbox配置ubuntu1804虚拟机相关流程 相关版本能解决的问题安装流程1:新建虚拟机安装流程2:配置虚拟机安装流程3:安装虚拟机系统安装流程4:设置ubuntu 相关版本 virtualbox使用VirtualBox官网下载的6.1.34 r150636 版。ubunt…...
防火墙基本概念
思维导图 1. 什么是防火墙? 网络在远古时期没有防火墙大家都是联通的,any to any,没有防火墙的时代就相当于没有门的房子, 没有城墙的城市。 路由器与交换机的本质是转发,防火墙的本质是控制和防护。 防火墙ÿ…...
易点易动固定资产管理平台:打通BMP,实现高效流程管理与全生命周期管理
在现代企业管理中,固定资产的流程管理和全生命周期管理是提高效率和降低成本的关键。易点易动固定资产管理平台通过打通BMP(Business Process Management)系统,实现了固定资产流程管理和全生命周期高效化管理的目标。本文将详细介…...
uniapp webview实现双向通信
需求: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动态库
定义:动态函数库,是在程序执行时动态(临时)由目标程序去调用 优点: 调用时不复制,程序运行时动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,…...
ESP-IDF学习——1.环境安装与hello-world
ESP-IDF学习——1.环境安装与hello-world 0.前言一、环境搭建1.官方IDE工具2.vscode图形化配置 二、示例工程三、自定义工程四、点灯五、总结 0.前言 最近在学习freertos,但由于买的书还没到,所以先捣鼓捣鼓ESP-IDF,因为这个比Arduino更接近底…...
【算法】二分答案
文章目录 相关链接什么时候使用二分答案?题目列表最大化最小化相关题目列表📕2439. 最小化数组中的最大值解法1——二分答案解法2——分类讨论O(n) 2513. 最小化两个数组中的最大值(二分答案lcm容斥原理)🐂好题&#x…...
阿曼市场最全开发攻略,看这一篇就够了
中东是一个充满外贸机遇的市场,已经成为很多外贸人重点开发的市场。 阿曼的海岸南方和东方临阿拉伯海,东北方则抵阿曼湾。阿曼因为扼守着世界上最重要的石油输出通道——波斯湾和阿曼湾之间的霍尔木兹海峡,所以地理位置非常重要,…...
探讨UUID和Secrets:确保唯一性与数据安全的利器
😀前言 在现代软件开发中,唯一标识符(UUID)和机密信息的处理是至关重要的。UUID是用于唯一标识数据记录和对象的128位值,确保了全球范围内的唯一性。同时,Python的secrets模块为处理机密信息提供了强大的随…...
06-Redis缓存高可用集群
上一篇:05-Redis高可用集群之水平扩展 1.集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,…...
LCP 18.早餐组合
题目来源: leetcode题目,网址:LCP 18. 早餐组合 - 力扣(LeetCode) 解题思路: 按序遍历饮料数组,二分查找符合要求 staple 中满足要求的最大值所在位置。最后返回所有*(最大位置…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
