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

C++ 08:对象数组——批量管理对象的高效方式

对象数组本质是元素为类对象的数组,和基本类型数组用法相似,但会自动触发每个对象的构造与析构函数,是批量管理同类对象的核心工具。


一、核心概念与语法

1. 定义对象数组

类名 数组名[数组长度];
  • 定义时系统会为每个元素自动调用匹配的构造函数完成初始化。
  • 数组生命周期结束时,会为每个对象自动调用析构函数

2. 访问成员

  • 访问数据成员:数组名[下标].数据成员;
  • 调用成员函数:数组名[下标].成员函数(实参列表);

注意:必须保证成员有合适的访问权限(如public)。


二、完整示例代码

以长方体类Box为例,演示对象数组的创建、初始化与使用:

#include <iostream> using namespace std; class Box { public: // 带默认参数的构造函数(可作为无参构造) Box(int len = 1, int w = 1, int h = 1) : length(len), width(w), height(h) { cout << "Box构造函数被调用,它的长是:" << length << endl; } ~Box() { cout << "Box析构函数被调用,它的长是:" << length << endl; } int volume() { return length * width * height; } private: int length; // 长 int width; // 宽 int height; // 高 }; int main() { // 1. 定义并初始化对象数组 Box a[3] = { Box(), // 调用默认参数构造 Box(10, 15), // 传入部分参数 Box(20, 30, 40) // 传入全部参数 }; // 2. 访问数组元素的成员函数 cout << "a[0] 的体积是: " << a[0].volume() << endl; cout << "a[1] 的体积是: " << a[1].volume() << endl; cout << "a[2] 的体积是: " << a[2].volume() << endl; return 0; }

三、执行结果与规律分析

Box构造函数被调用,它的长是:1 Box构造函数被调用,它的长是:10 Box构造函数被调用,它的长是:20 a[0] 的体积是: 1 a[1] 的体积是: 150 a[2] 的体积是: 24000 Box析构函数被调用,它的长是:20 Box析构函数被调用,它的长是:10 Box析构函数被调用,它的长是:1

关键规律

  1. 构造顺序:从数组下标 0 开始往后依次调用构造函数。
  2. 析构顺序:与构造顺序相反,从数组最后一个元素往前调用析构函数(栈式管理)。
  3. 自动调用:数组中每个对象都会自动触发构造和析构,无需手动调用。

四、核心总结

  1. 对象数组是类对象的集合,用法与基本类型数组一致。
  2. 定义数组时自动调用构造函数,数组销毁时自动调用析构函数。
  3. 构造顺序:从前往后;析构顺序:从后往前
  4. 访问成员时用.运算符,需保证成员访问权限为public
http://www.jsqmd.com/news/509617/

相关文章:

  • 开源字体Outfit:现代几何无衬线设计的多场景解决方案
  • RTOS移植不求人:从芯片手册读取时钟树、NVIC配置、SysTick重定向到任务调度器初始化,一文打通全部底层链路
  • 第 4 篇:内容即数据——frontmatter 规范、数据结构与构建链路的工程化设计
  • Qwen3-32B-Chat私有部署一文详解:RTX4090D显存优化、低内存加载与量化支持
  • JPEGView:高效轻量级图像查看器的技术解析与应用指南
  • 开源力量:跟随社区百万下载量模型all-MiniLM-L6-v2,快速入门句子嵌入技术
  • 如何在3分钟内用AI生成专业演示文稿:PPTAgent智能演示文稿生成工具完整指南
  • DAMO-YOLO与MySQL数据库集成:检测结果存储与分析方案
  • Botty完全指南:暗黑破坏神2自动化刷宝的智能识别技术与实战优化策略
  • Vue2项目实战:用AntV G6打造可折叠树形结构(附完整代码)
  • Pixel Dimension Fissioner开发者指南:MT5-Zero-Shot-Augment调用全解析
  • java微信小程序的便捷理疗店服务预约系统的研究与实现
  • 2026年知名的郑州定制无纺布袋厂家推荐:郑州环保无纺布袋高口碑品牌推荐 - 品牌宣传支持者
  • 【ROS2】机械臂抓取——gazebo_grasp_plugin编译排障与模型集成实战
  • 2026年定制类岗亭及移动厕所应用白皮书:移动垃圾分类房/保安岗亭/值班室/可移动垃圾房/吸烟亭/环卫休息室/选择指南 - 优质品牌商家
  • 3个技术突破:Argos Translate实现企业级离线翻译的创新方案
  • MySQL索引优化实战:覆盖、下推、合并与跳跃的应用解析
  • 元宇宙拆迁队长:强拆违规NFT日入百万的技术法则
  • Qwen3-VL-8B聊天系统部署全攻略:小白也能轻松搞定
  • MAI-UI-8B与Java集成开发:企业级应用案例解析
  • 车牌识别实战:从模板匹配到GUI交互的全流程解析
  • CogVideoX-2b应用指南:从创意到成片,快速制作短视频内容
  • Fetch API进阶手册:如何用AbortController取消请求+跨域Cookie配置详解
  • Nanbeige 4.1-3B保姆级教学:为像素终端添加离线模式与本地缓存机制
  • Qwen All-in-One效果实测:轻量级模型的情感分析与对话生成展示
  • Token账单暴涨300%?Dify生产环境实时成本监控插件下载、签名验证与灰度安装全链路实操,手慢无!
  • 告别命令行:用Win-PS2EXE图形化界面轻松编译PowerShell脚本
  • 灵感画廊环境部署:Python 3.10+虚拟环境最小依赖安装清单
  • 逆向工程实战:如何用Neural Cleanse揪出AI模型中的隐藏后门?
  • Dify自定义节点异步化改造:为什么你的Webhook总是超时?揭秘RocketMQ+Redis Stream双通道兜底架构