C++学习笔记——对象的指针

目录
一、对象的指针
二、减少对象的复制开销
三、应用案例
游戏引擎
图像处理库
数据库管理系统
航空航天软件
金融交易系统
四、代码的案例应用
一、对象的指针
是一种常用的技术,用于处理对象的动态分配和管理。使用对象的指针可以实现以下几个方面的功能:
- 动态分配对象:通过使用
new运算符,可以在堆上动态地创建一个对象,并返回该对象的指针。例如:
Rectangle* rect = new Rectangle(5, 6);
-
对象的生命周期管理:通过手动管理对象的创建和销毁,可以更灵活地控制对象的生命周期。例如,可以根据需要创建和销毁对象,而不是在程序的开始和结束时进行。
-
对象的共享和传递:通过指针,可以轻松地共享和传递对象。多个指针可以指向同一个对象,从而实现多个地方对同一对象的访问和修改。
-
对象的多态性:通过基类指针指向派生类对象,可以实现多态性。这样可以根据实际的对象类型,在运行时决定调用哪个函数。例如
Shape* shape = new Rectangle(5, 6); // 基类指针指向派生类对象
shape->draw(); // 在运行时调用派生类的函数
二、减少对象的复制开销
使用对象指针可以减少对象的复制开销。当对象较大或需要频繁传递时,通过使用指针传递对象可以提高性能。
然而,使用对象指针需要注意以下几点:
内存管理:需要手动管理对象的内存,包括及时释放对象所占用的内存,以避免内存泄漏。使用
new分配的内存需要通过delete来释放,使用new[]分配的数组需要通过delete[]来释放。空指针检查:在使用对象指针之前,需要进行空指针检查,以避免访问空指针导致的运行时错误。
所有权和生命周期:对于多个指针指向同一个对象的情况,需要明确对象的所有权和生命周期。避免在对象已被销毁后继续使用指针。
总结起来,对象的指针在C++中是一种强大的工具,可以实现动态分配、对象的共享和传递、对象的多态性等功能。但同时也需要注意内存管理、空指针检查和对象所有权等问题。正确使用对象的指针可以提高程序的灵活性和性能。
三、应用案例
游戏引擎
-
游戏引擎是一种用于开发视频游戏的软件系统。它需要处理图形渲染、物理模拟、碰撞检测、输入处理等复杂任务。C++在游戏引擎中得到广泛应用,因为它具有高性能、低级别的硬件访问和强大的图形库支持。例如,著名的游戏引擎Unity和Unreal Engine都使用了C++。
图像处理库
-
图像处理库用于处理和操作图像数据。它们通常提供各种算法和功能,如图像滤波、特征提取、图像变换等。C++在图像处理库中广泛应用,因为它可以高效地处理大量的图像数据,并且可以利用底层硬件加速功能。例如,OpenCV是一个流行的开源图像处理库,使用C++编写。
数据库管理系统
-
数据库管理系统(DBMS)用于管理和组织大量结构化数据。DBMS提供了高效的数据存储、查询和管理功能。C++在数据库管理系统中被广泛用于开发底层存储引擎和查询优化器等关键组件,以提高性能和可扩展性。例如,MySQL和PostgreSQL这样的流行数据库系统使用C++进行开发。
航空航天软件
-
航空航天领域的软件需要处理复杂的物理模型、实时数据传输和飞行控制算法等任务。C++被广泛应用于航空航天软件开发,因为它可以提供高性能、低级别的硬件访问和严格的实时性能。例如,NASA使用C++开发了许多航天任务中的关键软件。
金融交易系统
-
金融交易系统需要处理大量的交易数据,并在毫秒级别内执行高频交易。C++在金融领域得到广泛应用,因为它具有高性能、低延迟和强大的并发性。例如,一些高频交易公司使用C++编写他们的交易平台。
四、代码的案例应用
用于计算并打印斐波那契数列的前n个数字:
#include <iostream>int fibonacci(int n) {if (n <= 1) {return n;} else {return fibonacci(n - 1) + fibonacci(n - 2);}
}int main() {int n = 10; // 要计算的斐波那契数列的前n个数字std::cout << "斐波那契数列的前" << n << "个数字是:" << std::endl;for (int i = 0; i < n; ++i) {std::cout << fibonacci(i) << " ";}std::cout << std::endl;return 0;
}
解释:
-
首先,我们定义了一个名为
fibonacci的函数,用于递归地计算斐波那契数列中第n个数字的值。如果n小于等于1,则直接返回n。否则,通过递归调用fibonacci函数来计算前两个数字的和。 -
在
main函数中,我们定义了一个变量n,表示要计算的斐波那契数列的前n个数字的数量。 -
然后,我们使用一个循环来依次计算并打印斐波那契数列的每个数字。循环变量
i从0开始,直到小于n为止。 -
在循环体内部,我们通过调用
fibonacci函数来计算当前位置的斐波那契数,并使用std::cout打印出来。 -
最后,我们在每个数字之后输出一个空格,并通过
std::endl输出换行符。
运行该代码,将输出斐波那契数列的前10个数字:
斐波那契数列的前10个数字是:
0 1 1 2 3 5 8 13 21 34
这个简单的代码案例展示了C++中的函数定义、递归、循环和输出操作的基本用法。它计算并打印斐波那契数列的前n个数字,展示了C++代码的基本结构和语法。
相关文章:
C++学习笔记——对象的指针
目录 一、对象的指针 二、减少对象的复制开销 三、应用案例 游戏引擎 图像处理库 数据库管理系统 航空航天软件 金融交易系统 四、代码的案例应用 一、对象的指针 是一种常用的技术,用于处理对象的动态分配和管理。使用对象的指针可以实现以下几个方面的功…...
QT5.14 实现ModbusTCP客户端 Demo
本文在QT5.14平台,基于QModbusClientTcp类,实现了客户端对单个寄存器的读写,用ModbusSlave做服务器做测试。 1.界面 (1)更改读按钮的名称为bt_Read (2)更改写按钮的名称为bt_Write 2.修改pro文件的第三行 greaterThan(QT_MAJOR_VERSION, 4)…...
c++析构函数
析构函数的简述 1. 析构函数和构造函数类似,是c规定当对象的生命周期结束时,默认你会调用析构函数。 2. 同理,当我们不写析构函数的时候,编译器会自动生成一个空实现的析构函数。 3. 析构函数只能编译器自己调用,我们…...
nodejs 服务端token 高效缓存验证
在前后端分离开发过程中,经常涉及权限验证的问题,一般都是采用由服务端根据前端传递的用户名和密码,验证成功后生成token,然后前端在访问服务端接口时,再附带token访问。 如果服务端高频次的解析token,进行内容验证,则会大大降低接口性能,而采用内存或者redis进行合法…...
C++内存管理机制(侯捷)笔记2
C内存管理机制(侯捷) 本文是学习笔记,仅供个人学习使用。如有侵权,请联系删除。 参考链接 Youtube: 侯捷-C内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 下面是第二讲allocator具体实…...
java基础之异常练习题
异常 1.Java 中所有的错误/异常都继承自 Throwable类;在该类的子类中, Error 类表示严重的底层错误, 对于这类错误一般处理的方式是 直接报告并终止程序 ; Exception 类表示异常。 2.查阅API,完成以下填空:…...
智慧旅游景区解决方案:PPT全文49页,附下载
关键词:智慧景区建设,智慧旅游平台,智慧旅游运营检测系统项目,智慧文旅,智慧景区开发与管理,智慧景区建设核心,智慧景区开发与管理 一、智慧景区建设现状 1、基础设施建设:智慧景区…...
Demo: 给图片添加自定义水印并下载
给图片添加自定义水印并下载 <template><div class"wrap"><div class"optea"><div class"file-upload"><p>选择图片</p><el-button type"text" style"color: #c00;"><label f…...
黑马苍穹外卖学习Day5
文章目录 Redis学习Redis简介准备工作Redis常用数据类型介绍各数据类型的特点Redis常用命令字符串操作命令哈希操作命令列表操作命令集合操作命令有序集合操作命令通用操作命令 在Java中操作Redis导入Spring Data Redis坐标配置Redis数据源编写配置类,创建RedisTemp…...
【.NET Core】可为null类型详解
【.NET Core】可为null类型详解 文章目录 【.NET Core】可为null类型详解一、概述二、可为空的值类型2.1 声明和赋值2.2 检查可为空值类型2.3 基础类型与可为空的值类型互换2.4 可为空的值类型装箱和取消装箱2.5 如何确定可为空的值类型 三、可为 null 的引用类型 一、概述 nu…...
基于知识图谱的健康知识问答系统
基于知识图谱的健康知识问答系统 引言数据集与技术选型数据集技术选型 系统功能与实现数据导入与图数据库构建问答任务设计与实现1. 实体提取2. 用户意图识别 前端聊天界面与问答系统 结语 引言 随着互联网的发展,人们对健康知识的需求逐渐增加。为了更方便地获取健…...
橘子学K8S03之容器的理解
前面我们知道了容器是通过对一个普通的linux进程进行隔离和限制实现的一种特殊视角下的进程表现。而隔离和限制的实现技术分别是"Namespace"和“Cgroups”,在这两种机制的控制下,我们需要知道容器的本质是一种特殊的进程。 我们现在有了这个认知之后&…...
算法第十二天-矩形区域不超过K的最大数值和
矩形区域不超过K的最大数值和 题目要求 解题思路 来自[宫水三叶] 从题面来看显然是一道[二维前缀和]的题目。本题预处理前缀和的复杂度为O(m* n) 搜索所有子矩阵需要枚举[矩形左上角]和[矩形右下角],复杂度是 O ( m 2 ∗ n 2 ) O(m^2 * n^2) O(m2∗n2),…...
【js】js数组对象去重:
文章目录 一、Map()二、对象访问属性的方法三、indexOf()四、双层for循环 let arrObj [{ name: "小红", id: 1 },{ name: "小橙", id: 1 },{ name: "小黄", id: 4 },{ name: "小绿", id: 3 },{ name: "小青", id: 1 },{ na…...
python高校舆情分析系统+可视化+情感分析 舆情分析+Flask框架(源码+文档)✅
毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题ÿ…...
Phaser详解
Phaser是一个相对较新且功能强大的同步原语,它于Java 7中引入,用于协调并行任务的执行。与CyclicBarrier和CountDownLatch等传统的同步工具相比,Phaser提供了更灵活和更高级的功能,特别是在处理动态和可变的并行任务集合时。 1.P…...
2个nodejs进程利用redis 实现订阅发布
1.新建文件 redis_db.js use strict;const redis require(redis); const options {host: "127.0.0.1",port: 6379,password: "123456", // CONFIG SET requirepass "123456" }var array [] for(var i0; i<3; i){const client redis.crea…...
LeetCode——2397. 被列覆盖的最多行数
通过万岁!!! 题目:给你一个二维数组,然后里面是0和1,然后让你从里面选择numSelect列,使得去掉选择的列以后不存在1的行的数量最少。思路: 看到这个题目,本来以为是每一列…...
java通过HttpClient方式实现https请求的工具类(绕过证书验证)
目录 一、引入依赖包二、HttpClient方式实现的https请求工具类三、测试类 一、引入依赖包 引入相关依赖包 <!--lombok用于简化实体类开发--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><option…...
【自学笔记】01Java基础-07面向对象基础-04接口与内部类详解
记录学习Java基础中有关接口类和内部类的知识。 1 接口 interface 关键字用于定义接口类,接口类是一系列方法的声明,一般只有方法的特征没有方法的实现,因此可以被不同的类接入实现,而这些实现可以具有不同的行为(功…...
终极D2DX宽屏补丁:让经典暗黑破坏神2在现代PC上完美重生
终极D2DX宽屏补丁:让经典暗黑破坏神2在现代PC上完美重生 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还…...
Linuxbonding链路异常定位实战
Linuxbonding链路异常定位实战这是一篇面向中级 Linux 使用者的技术文章,主题聚焦在bonding链路,重点讨论链路聚合、冗余切换和接口状态。在真实生产环境中,bonding链路相关问题往往不会以单一错误形式出现,而是混杂在日志、权限、…...
开源机械爪控制库:从PID算法到ROS集成的全栈开发指南
1. 项目概述:一个开源的机械爪设计与控制库最近在机器人硬件开发的圈子里,开源项目“MeyerZhou/openclaw”引起了不少创客和机器人爱好者的注意。简单来说,这是一个专注于机械爪(或称机械手、夹爪)设计与控制的代码库和…...
DIY便携FPV地面站:从电路设计到3D打印的完整制作指南
1. 项目概述:为什么需要一个便携式FPV地面站?玩FPV(第一人称视角)飞行,无论是竞速穿越还是航拍探索,最核心的体验就是那块屏幕。大多数飞手依赖FPV眼镜带来的沉浸感,但在很多场景下,…...
AI 术语通俗词典:计算图
计算图是深度学习、自动微分、神经网络训练和人工智能框架中非常重要的一个术语。它用来描述:把一次数学计算过程表示成由节点和边组成的图结构。换句话说,计算图是在回答:模型中的输入、参数、运算和输出之间,到底是如何一步步连…...
基于IMAP的邮件自动化处理工具mymailclaw配置与实战指南
1. 项目概述:一个轻量级的邮件抓取与处理工具最近在折腾一个需要自动化处理邮件通知的小项目,发现市面上的方案要么太重,要么不够灵活。直到我遇到了psandis/mymailclaw这个项目,它就像一把小巧而锋利的瑞士军刀,专门用…...
【仅剩217份】《Midjourney后印象派风格白皮书》V2.3——含17位艺术家专属LoRA适配建议、32组跨文化色彩映射表及实时风格强度校准工具(2024.06内部封测版)
更多请点击: https://intelliparadigm.com 第一章:后印象派风格的视觉基因与Midjourney语义解码 后印象派并非对自然的模仿,而是对色彩、结构与主观情绪的系统性重构——梵高旋转的星云、塞尚凝固的苹果、高更平面化的塔希提图腾,…...
Linux权限继承与umask配置实践
Linux权限继承与umask配置实践很多协作目录问题并不是因为当前权限错了,而是因为新建文件的默认权限总是不符合预期。背后的核心变量之一就是 umask。中级阶段如果不理解默认权限是怎么生成的,就会陷入“每次都手工 chmod”的低效循环。一、默认权限不是…...
ARM架构寄存器与参数管理核心技术解析
1. ARM架构寄存器与参数管理基础解析 在ARM架构的底层开发中,寄存器与参数管理是系统控制和调试的核心机制。作为嵌入式开发者,我经常需要与这两种资源打交道,它们虽然都用于存储数据,但在使用场景和特性上存在本质差异。 寄存器…...
OneQuery:统一异构数据源查询的抽象层设计与实战
1. 项目概述:一个查询,无限可能最近在折腾一个数据聚合项目,需要从多个异构数据源里捞数据,然后统一处理。这活儿听起来简单,但真干起来,每个数据源都有自己的查询语法、连接方式和返回格式,光是…...
