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

目录

一、对象的指针

二、减少对象的复制开销

三、应用案例

游戏引擎

图像处理库

数据库管理系统

航空航天软件

金融交易系统

四、代码的案例应用


一、对象的指针

是一种常用的技术,用于处理对象的动态分配和管理。使用对象的指针可以实现以下几个方面的功能:

  1. 动态分配对象:通过使用 new 运算符,可以在堆上动态地创建一个对象,并返回该对象的指针。例如:
Rectangle* rect = new Rectangle(5, 6);
  1. 对象的生命周期管理:通过手动管理对象的创建和销毁,可以更灵活地控制对象的生命周期。例如,可以根据需要创建和销毁对象,而不是在程序的开始和结束时进行。

  2. 对象的共享和传递:通过指针,可以轻松地共享和传递对象。多个指针可以指向同一个对象,从而实现多个地方对同一对象的访问和修改。

  3. 对象的多态性:通过基类指针指向派生类对象,可以实现多态性。这样可以根据实际的对象类型,在运行时决定调用哪个函数。例如

Shape* shape = new Rectangle(5, 6); // 基类指针指向派生类对象
shape->draw(); // 在运行时调用派生类的函数

二、减少对象的复制开销

使用对象指针可以减少对象的复制开销。当对象较大或需要频繁传递时,通过使用指针传递对象可以提高性能。

然而,使用对象指针需要注意以下几点:

  1. 内存管理:需要手动管理对象的内存,包括及时释放对象所占用的内存,以避免内存泄漏。使用 new 分配的内存需要通过 delete 来释放,使用 new[] 分配的数组需要通过 delete[] 来释放。

  2. 空指针检查:在使用对象指针之前,需要进行空指针检查,以避免访问空指针导致的运行时错误。

  3. 所有权和生命周期:对于多个指针指向同一个对象的情况,需要明确对象的所有权和生命周期。避免在对象已被销毁后继续使用指针。

总结起来,对象的指针在C++中是一种强大的工具,可以实现动态分配、对象的共享和传递、对象的多态性等功能。但同时也需要注意内存管理、空指针检查和对象所有权等问题。正确使用对象的指针可以提高程序的灵活性和性能。

三、应用案例

 

游戏引擎

  1. 游戏引擎是一种用于开发视频游戏的软件系统。它需要处理图形渲染、物理模拟、碰撞检测、输入处理等复杂任务。C++在游戏引擎中得到广泛应用,因为它具有高性能、低级别的硬件访问和强大的图形库支持。例如,著名的游戏引擎Unity和Unreal Engine都使用了C++。

图像处理库

  1. 图像处理库用于处理和操作图像数据。它们通常提供各种算法和功能,如图像滤波、特征提取、图像变换等。C++在图像处理库中广泛应用,因为它可以高效地处理大量的图像数据,并且可以利用底层硬件加速功能。例如,OpenCV是一个流行的开源图像处理库,使用C++编写。

数据库管理系统

  1. 数据库管理系统(DBMS)用于管理和组织大量结构化数据。DBMS提供了高效的数据存储、查询和管理功能。C++在数据库管理系统中被广泛用于开发底层存储引擎和查询优化器等关键组件,以提高性能和可扩展性。例如,MySQL和PostgreSQL这样的流行数据库系统使用C++进行开发。

航空航天软件

  1. 航空航天领域的软件需要处理复杂的物理模型、实时数据传输和飞行控制算法等任务。C++被广泛应用于航空航天软件开发,因为它可以提供高性能、低级别的硬件访问和严格的实时性能。例如,NASA使用C++开发了许多航天任务中的关键软件。

金融交易系统

  1. 金融交易系统需要处理大量的交易数据,并在毫秒级别内执行高频交易。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;
}

解释:

  1. 首先,我们定义了一个名为 fibonacci 的函数,用于递归地计算斐波那契数列中第n个数字的值。如果n小于等于1,则直接返回n。否则,通过递归调用 fibonacci 函数来计算前两个数字的和。

  2. main 函数中,我们定义了一个变量 n,表示要计算的斐波那契数列的前n个数字的数量。

  3. 然后,我们使用一个循环来依次计算并打印斐波那契数列的每个数字。循环变量 i 从0开始,直到小于n为止。

  4. 在循环体内部,我们通过调用 fibonacci 函数来计算当前位置的斐波那契数,并使用 std::cout 打印出来。

  5. 最后,我们在每个数字之后输出一个空格,并通过 std::endl 输出换行符。

运行该代码,将输出斐波那契数列的前10个数字:

斐波那契数列的前10个数字是:
0 1 1 2 3 5 8 13 21 34 

这个简单的代码案例展示了C++中的函数定义、递归、循环和输出操作的基本用法。它计算并打印斐波那契数列的前n个数字,展示了C++代码的基本结构和语法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/310191.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pythroch abaconda 安装 cuda、版本确定、pytorch 安装

一、简述 公司有一个深度学习的项目&#xff0c;身上也没有其他项目&#xff0c;恰好乘着个机会学一下pytorch 和YOLOv8. 1、下载abaconda https://repo.anaconda.com/archive/ 2、安装 环境变量要✔ 其他一直下一步 3、测试 (base) C:\Users\alber>conda -V cond…

Tensorflow Lite从入门到精通

TensorFlow Lite 是 TensorFlow 在移动和 IoT 等边缘设备端的解决方案&#xff0c;提供了 Java、Python 和 C API 库&#xff0c;可以运行在 Android、iOS 和 Raspberry Pi 等设备上。目前 TFLite 只提供了推理功能&#xff0c;在服务器端进行训练后&#xff0c;经过如下简单处…

C++11_lambda表达式

文章目录 一、lambda表达式1.lambda的组成2.[capture-list] 的其他使用方法2.1混合捕捉 二、lambda表达式的使用场景1.替代仿函数 总结 一、lambda表达式 lambda表达式是C11新引入的功能&#xff0c;它的用法与我们之前学过的C语法有些不同。 1.lambda的组成 [capture-list] …

消息开始事件message start event

一&#xff1a;bpmn 二&#xff1a;java repositoryService.createDeployment().name("消息事件流程").addClasspathResource("bpmn/msg_event_process.bpmn").deploy(); identityService.setAuthenticatedUserId("huihui"); ProcessInstance p…

vue3中ref和reactive联系与区别以及如何选择

vue3中ref和reactive区别与联系 区别 1、ref既可定义基本数据类型&#xff0c;也可以定义引用数据类型&#xff0c;reactive只能定义应用数据类型 2、ref在js中取响应值需要使用 .value&#xff0c;而reactive则直接取用既可 3、ref定义的对象通过.value重新分配新对象时依旧…

放电深度对电池寿命的影响

一、SOC和DOD概念 SOC&#xff1a;State Of Charge. 电池SOC是指荷电状态&#xff0c;是用来反映电池的剩余容量的&#xff0c;其数值上定义为剩余容量占电池容量的比值&#xff0c;常用百分数表示&#xff1b;其取值范围为0~1&#xff0c;当“SOC0”时表示电池放电完全&#…

python爬虫实战(6)--获取某度热榜

1. 项目描述 需要用到的类库 pip install requests pip install beautifulsoup4 pip install pandas pip install openpyxl然后&#xff0c;我们来编写python脚本&#xff0c;并引入需要的库&#xff1a; import requests from bs4 import BeautifulSoup import pandas as p…

SpringBoot 自动装配原理

一、什么是自动装配 自动装配是指应用程序启动时由容器自动扫描和装配相关的组件和模块&#xff0c;无须像传统的spring那样在xml文件中手动配置Bean&#xff0c;从而简化了应用程序的配置过程&#xff0c;提高开发效率。 二、SpringBootApplication解析 进入到这个 SpringB…

概率中的 50 个具有挑战性的问题 [9/50]:掷骰子

一、说明 我最近对与概率有关的问题产生了兴趣。我偶然读到了弗雷德里克莫斯特勒&#xff08;Frederick Mosteller&#xff09;的《概率论中的五十个具有挑战性的问题与解决方案》&#xff09;一书。我认为创建一个系列来讨论这些可能作为面试问题出现的迷人问题会很有趣。每篇…

你需要尽早知道的15个开源网络安全工具

在本文中&#xff0c;你将找到一个开放源码网络安全工具列表&#xff0c;你一定要查看这些工具。 开源工具代表了技术版图中的一股有活力的力量&#xff0c;体现了创新、协作和可访问性&#xff0c;这些工具是根据透明度和社区驱动的原则开发的&#xff0c;使用户能够根据其独特…

Vue-13、Vue深度监视

1、监视多级结构中某个属性的变化 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>watch深度监视</title><script type"text/javascript" src"https://cdn.jsdelivr.net/npm…

Vue基础-搭建Vue运行环境

这篇文章介绍了在Vue.js项目中进行开发环境搭建的关键步骤。包括node.js安装和配置、安装Vue及Vue CLI工具、安装webpack模板、安装vue-router、创建Vue项目等步骤。这篇文章为读者提供了清晰的指南&#xff0c;帮助他们快速搭建Vue.js开发环境&#xff0c;为后续的项目开发奠定…

端到端自动驾驶

自动驾驶主要流程&#xff1a;感知->预测->规划 预测是预测周围目标&#xff08;车、行人、动物等&#xff09;的轨迹&#xff0c;规划是规划自车的运动轨迹。 UniAD[CVPR 2023]: 使用transformer架构&#xff0c;统一自动驾驶流程&#xff0c;完成所有检测&#xff0c…

如何上传苹果ipa安装包?

目录 引言 摘要 第二步&#xff1a;打开appuploader工具 第二步&#xff1a;打开appuploader工具&#xff0c;第二步&#xff1a;打开appuploader工具 第五步&#xff1a;交付应用程序&#xff0c;在iTunes Connect中查看应用程序 总结 引言 在将应用程序上架到苹果应用…

Navicat 技术干货 | 为 MySQL 表选择合适的存储引擎

MySQL 是最受欢迎的关系型数据库管理系统之一&#xff0c;提供了不同的存储引擎&#xff0c;每种存储引擎都旨在满足特定的需求和用例。在优化数据库和确保数据完整性方面&#xff0c;选择合适的存储引擎是至关重要的。今天&#xff0c;我们将探讨为 MySQL 表选择合适的存储引擎…

【开源项目】轻量元数据管理解决方案——Marquez

大家好&#xff0c;我是独孤风。 又到了本周的开源项目推荐。最近推荐的元数据管理项目很多&#xff0c;但是很多元数据管理平台的功能复杂难用。 那么有没有轻量一点的元数据管理项目呢&#xff1f; 今天为大家推荐的开源项目&#xff0c;就是一个轻量级的元数据管理工具。虽然…

《SPSS统计学基础与实证研究应用精解》视频讲解:SPSS的功能特色

《SPSS统计学基础与实证研究应用精解》1.2 SPSS的功能特色 视频为《SPSS统计学基础与实证研究应用精解》张甜 杨维忠著 清华大学出版社 一书的随书赠送视频讲解1.2节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。本书旨在手把手…

NSSCTF Interesting_include

开启环境: 通过审计,我们可知: flag在flag.php中,可以利用php中伪协议 payload:?filterphp://filter/readconvert.base64-encode/resourceflag.php 将其base64解码就是flag. NSSCTF{3dc54721-be9e-444c-8228-7133fba76ad4}

回归预测 | Matlab基于CPO-BP基于冠豪猪算法优化BP神经网络的数据多输入单输出回归预测

回归预测 | Matlab基于CPO-BP基于冠豪猪算法优化BP神经网络的数据多输入单输出回归预测 目录 回归预测 | Matlab基于CPO-BP基于冠豪猪算法优化BP神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.CPO-BP回归基于冠豪猪优化算法[24年新…

关于Vue前端接口对接的思考

关于Vue前端接口对接的思考 目录概述需求&#xff1a; 设计思路实现思路分析1.vue 组件分类和获取数值的方式2.http 通信方式 分类 如何对接3.vue 组件分类和赋值方式&#xff0c; 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your p…