C++游戏开发深度解析

引言

在本篇文章中,我们将深入探讨C++在游戏开发中的应用,包括内存管理、面向对象编程(OOP)、模板使用等,并通过实际代码示例来帮助理解。

内存管理与智能指针
 

cpp

深色版本

#include <iostream>
#include <memory> // For smart pointersclass GameObject {
public:GameObject() { std::cout << "GameObject created\n"; }~GameObject() { std::cout << "GameObject destroyed\n"; }void update() { std::cout << "Updating game object\n"; }
};int main() {// 使用智能指针管理GameObject的生命周期std::unique_ptr<GameObject> gameObject = std::make_unique<GameObject>();gameObject->update();// 当gameObject超出作用域时,自动调用析构函数释放资源
}

注释

  • std::unique_ptr 提供了独占的所有权语义。当指向的对象不再需要时,它会自动删除该对象。
  • 有效避免了内存泄漏问题,同时简化了内存管理。
面向对象编程(OOP)
 

cpp

深色版本

class Character {
protected:int health;
public:Character(int h) : health(h) {}virtual void attack(Character& enemy) = 0; // 纯虚函数,定义接口但不实现int getHealth() const { return health; }void setHealth(int h) { health = h; }
};class Warrior : public Character {
public:Warrior() : Character(100) {} // 默认构造函数,初始化战士的生命值为100void attack(Character& enemy) override {std::cout << "Warrior attacks!\n";enemy.setHealth(enemy.getHealth() - 10);}
};

注释

  • Character 类作为一个基类,定义了一个抽象方法 attack,具体实现由派生类完成。
  • Warrior 类继承自 Character 并实现了 attack 方法,展示了多态性如何允许不同类型的角色执行相同的操作。
模板与泛型编程
 

cpp

深色版本

template<typename T>
class Container {
private:T* items;int capacity;
public:Container(int size) : capacity(size), items(new T[size]) {}~Container() { delete[] items; }T& operator[](int index) { return items[index]; }
};int main() {Container<int> intContainer(5); // 创建一个整数容器for (int i = 0; i < 5; ++i) {intContainer[i] = i * 2; // 初始化容器元素}for (int i = 0; i < 5; ++i) {std::cout << intContainer[i] << std::endl; // 输出容器元素}
}

注释

  • Container 是一个通用的容器类模板,可以存储任何类型的数据。
  • 利用模板特性,我们可以编写更通用和复用性更高的代码。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ceph:关于Ceph 中使用 RADOS 块设备提供块存储的一些笔记整理(12)

写在前面 准备考试,整理 ceph 相关笔记博文内容涉及使用 RADOS 块设备提供块存储理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波…

【数据结构】(1)集合类的认识

一、什么是数据结构 1、数据结构的定义 数据结构就是存储、组织数据的方式&#xff0c;即相互之间存在一种或多种关系的数据元素的集合。 2、学习数据结构的目的 在实际开发中&#xff0c;我们需要使用大量的数据。为了高效地管理这些数据&#xff0c;实现增删改查等操作&…

Java 实现Excel转HTML、或HTML转Excel

Excel是一种电子表格格式&#xff0c;广泛用于数据处理和分析&#xff0c;而HTM则是一种用于创建网页的标记语言。虽然两者在用途上存在差异&#xff0c;但有时我们需要将数据从一种格式转换为另一种格式&#xff0c;以便更好地利用和展示数据。本文将介绍如何通过 Java 实现 E…

java中的算数运算符

1.java中的加法是“”。 简单数字的相加对于byte.short.char.int类型数字相加时进行整形提升至int,对于数据类型大于int的long.float.double数据类型有参与计算时&#xff0c;需要进行整形提升至最高的数据类型。 有字符串类型的相加&#xff0c;将数字视为字符串进行字符串的…

每日 Java 面试题分享【第 15 天】

欢迎来到每日 Java 面试题分享栏目&#xff01; 订阅专栏&#xff0c;不错过每一天的练习 今日分享 3 道面试题目&#xff01; 评论区复述一遍印象更深刻噢~ 目录 问题一&#xff1a;Java 中的基本数据类型有哪些&#xff1f;问题二&#xff1a;什么是 Java 中的自动装箱和…

程序代码篇---C++常量引用

文章目录 前言第一部分&#xff1a;C常量常量变量const与指针1.指向常量的指针2.常量指针3.指向常量的常量指针 常量成员函数const_cast运算符总结 第二部分&#xff1a;C引用引用的基本概念引用的声明引用的使用引用的特性1.不可变性2.无需解引用3.内存地址 引用的用途1.函数参…

【C语言】结构体与共用体深入解析

在C语言中&#xff0c;结构体&#xff08;struct&#xff09;和共用体&#xff08;union&#xff09;都是用来存储不同类型数据的复合数据类型&#xff0c;它们在程序设计中具有重要的作用。 推荐阅读&#xff1a;操作符详细解说&#xff0c;让你的编程技能更上一层楼 1. 结构体…

LLM架构与优化:从理论到实践的关键技术

标题&#xff1a;“LLM架构与优化&#xff1a;从理论到实践的关键技术” 文章信息摘要&#xff1a; 文章探讨了大型语言模型&#xff08;LLM&#xff09;开发与应用中的关键技术&#xff0c;包括Transformer架构、注意力机制、采样技术、Tokenization等基础理论&#xff0c;以…

思维练习题

目录 第一章 假设法1.题目1. 如何问问题2. 他们的职业是分别什么3. 谁做对了4. 鞋子的颜色 2.答案 空闲时间写一些思维题来锻炼下思维逻辑&#xff08;题目均收集自网上&#xff0c;分析推理为自己所写&#xff09;。 第一章 假设法 一个真实的假设往往可以让事实呈现眼前&…

【C++高并发服务器WebServer】-10:网络编程基础概述

本文目录 一、MAC地址二、IP地址三、子网掩码四、TCP/IP四层模型五、协议六、socket七、字节序 一、MAC地址 网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件&#xff0c;又称为网络适配器或网络接口卡NIC。其拥有 MAC 地址&#xff0c;属于 OSI模型的第2层…

为何SAP S4系统中要设置MRP区域?MD04中可否同时显示工厂级、库存地点级的数据?

【SAP系统PP模块研究】 一、物料主数据的MRP区域设置 SAP ECC系统中想要指定不影响MRP运算的库存地点,是针对库存地点设置MRP标识,路径为:SPRO->生产->物料需求计划->计划->定义每一个工厂的存储地点MRP,如下图所示: 另外,在给物料主数据MMSC扩充库存地点时…

C++ list 容器用法

C list 容器用法 C 标准库提供了丰富的功能&#xff0c;其中 <list> 是一个非常重要的容器类&#xff0c;用于存储元素集合&#xff0c;支持双向迭代器。<list> 是 C 标准模板库&#xff08;STL&#xff09;中的一个序列容器&#xff0c;它允许在容器的任意位置快速…

C++ | 红黑树

前言 本篇博客讲解c中数据结构红黑树&#xff0c;看这篇博客之前请先去看&#xff1a; C | AVL树_c avl树能有重复节点吗-CSDN博客 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青…

C语言从入门到进阶

视频&#xff1a;https://www.bilibili.com/video/BV1Vm4y1r7jY?spm_id_from333.788.player.switch&vd_sourcec988f28ad9af37435316731758625407&p23 //枚举常量 enum Sex{MALE,FEMALE,SECRET };printf("%d\n", MALE);//0 printf("%d\n", FEMALE…

WebSocket 详解:全双工通信的实现与应用

目录 一、什么是 WebSocket&#xff1f;&#xff08;简介&#xff09; 二、为什么需要 WebSocket&#xff1f; 三、HTTP 与 WebSocket 的区别 WebSocket 的劣势 WebSocket 的常见应用场景 WebSocket 握手过程 WebSocket 事件处理和生命周期 一、什么是 WebSocket&#xf…

一文讲解Java中Object类常用的方法

在Java中&#xff0c;经常提到一个词“万物皆对象”&#xff0c;其中的“万物”指的是Java中的所有类&#xff0c;而这些类都是Object类的子类&#xff1b; Object主要提供了11个方法&#xff0c;大致可以分为六类&#xff1a; 对象比较&#xff1a; public native int has…

51.和的逆运算问题|Marscode AI刷题

1.题目 问题描述 n 个整数两两相加可以得到 n(n - 1) / 2 个和。我们的目标是&#xff1a;根据这些和找出原来的 n 个整数。 按非降序排序返回这 n 个数&#xff0c;如果无解&#xff0c;输出 "Impossible"。 测试样例 样例1&#xff1a; 输入&#xff1a;n 3, …

SpringAI 搭建智能体(一):让模型执行客户端操作

在现代 AI 应用中&#xff0c;仅仅通过模型生成文本并不能满足复杂场景的需求。许多情况下&#xff0c;模型需要调用客户端的工具或函数来完成某些特定任务&#xff0c;例如查询数据库、访问第三方 API、执行系统命令等。Spring AI 提供了工具调用功能&#xff0c;使开发者可以…

Zemax 中的屋脊棱镜建模

光学棱镜是一种透明的光学元件&#xff0c;其表面平坦且抛光&#xff0c;可以折射光线。最常见的棱镜类型是三棱镜&#xff0c;它有两个三角形底座和三个矩形或略呈梯形的表面。棱镜通常由玻璃或丙烯酸等材料制成。当光线以一定角度进入棱镜时&#xff0c;它会在穿过棱镜时发生…

目标跟踪之sort算法(3)

这里写目录标题 1 流程1 预处理2 跟踪 2 代码 参考&#xff1a;sort代码 https://github.com/abewley/sort 1 流程 1 预处理 1.1 获取离线检测数据。1.2 实例化跟踪器。2 跟踪 2.1 轨迹处理。根据上一帧的轨迹预测当前帧的轨迹&#xff0c;剔除到当前轨迹中为空的轨迹得到当前…