C++ 对象数组

news/2025/1/16 2:46:57/

**数组元素不仅可以是基本数据类型,也可以是自定义类型。**例如,要存储和处理某单位全体雇员的信息,就可以建立一个雇员类的对象数组。对象数组的元素是对象,不仅具有数据成员,而且还有函数成员。 因此,和基本类型数组相比,对象数组有一些特殊之处。

(1)声明一个一维对象数组的语句形式为:

类名 数组名[常量表达式];

(2)与基本类型数组一样,在使用对象数组时也只能引用单个数组元素。每个数组元素都是一个对象,通过这个对象,便可以访问到它的公有成员,一般形式是:

数组名[下标表达式].成员名

(3)**对象数组的初始化过程,实际上就是调用构造函数对每一个元素对象进行初始化的过程。**如果在声明数组时给每一个数组元素指定初值,在数组初始化过程中就会调用与形参类型相匹配的构造函数,例如:

A a[2]={A(1,2),A(3,4)};

在执行时会先后两次调用带形参的构造函数分别初始化a[0]和a[1]。如果没有指定数组元素的初始值,就会调用默认的构造函数,例如:

A a[2]={A(1,2)};

在执行时首先调用带形参的构造函数初始化a[0],然后调用默认构造函数初始化a[1]。

【注意】
如果需要建立某个类的对象数组,在设计类的构造函数时,就要充分考虑到数组元素初始化的需要:当各元素对象的初值要求为相同的值时,应该在类中定义默认构造函数;当各个元素对象的初值要求为不同的值时,需要定义带形参(无默认值)的构造函数。

当一个数组中的元素对象被删除时,系统会自动调用析构函数来完成扫尾工作。

【例1】对象数组应用举例
Point.h文件:

#pragma once
#ifndef _POINT_H
#define _POINT_Hclass Point
{
public:Point();Point(int x, int y);~Point();void move(int newX, int newY);int getX() { return x; }int getY() { return y; }static void ShowCount();
private:int x, y;
};#endif // !_POINT_H

Point.cpp文件:

#include<iostream>
#include"Point.h"
using namespace std;Point::Point()
{x = y = 0;cout << "调用默认构造函数" << endl;
}
Point::Point(int x, int y):x(x),y(y)
{cout << "调用构造函数" << endl;
}
Point::~Point()
{cout << "调用析构函数" << endl;
}
void Point::move(int newX, int newY)
{cout << "把点移动到:("<<newX<<","<<newY<<")" << endl;x = newX;y = newY;
}

Main.cpp文件:

#include<iostream>
#include"Point.h"
using namespace std;int main()
{cout << "进入主函数" << endl;Point a[2];for (int i = 0; i < 2; i++){a[i].move(i + 10, i + 20);}cout << "退出主函数" << endl;return 0;
}

运行结果:
在这里插入图片描述


http://www.ppmy.cn/news/1001929.html

相关文章

Compose应用案例(利用docker compose安装lnmp实例)

目录 Compose应用案例 一、前提配置 &#xff08;一&#xff09;安装docker-ce&#xff08;Linux安装Docker&#xff09; &#xff08;二&#xff09;安装docker-compose 二、安装docker compose部署lnmp &#xff08;一&#xff09;目录结构&#xff1a; &#xff08;二…

PHP接口自动化测试框架实现

我们来看一个简单的PHP实现的超简单的接口。 ...//报名验证 private function apply_verify() {$raid $this->input->get_post(raid);$mid $this->input->get_post(mid);if (!$raid || !$mid) {$this->ret_json(10021, 参数错误);}$this->load->model(…

Linux文件管理知识:查找文件

前几篇文章一一介绍了LINUX进程管理控制命令及网络层面的知识体系&#xff0c;综所周知&#xff0c;一个linux系统是由很多文件组成的&#xff0c;那么既然有那么多文件&#xff0c;那我们该如何管理这些文件呢&#xff1f; Linux中的所有数据都是以文件形式存在的&#xff0c…

电测知识分享——三千字解读时钟电路最重要部件,建议收藏!

晶振作为时钟电路中最重要的部件&#xff0c;在电路中起着产生震荡频率的作用&#xff0c;可以产生高度稳定的信号&#xff0c;并稳定工作环境&#xff0c;为系统提供基本的时钟信号&#xff0c;在工业、科技、车载、数码、电子等多个领域几乎都有应用场景。 今天&#xff0c;…

使用火山云搜索ESCloud服务构建图文检索应用(以文搜图/以图搜图)

图文检索在生活中具有广泛的应用&#xff0c;常见的图片检索包括基于文本内容搜索和基于图片内容搜索。用户通过输入文字描述或上传图片就可以在海量的图片库中快速找到同款或者相似图片&#xff0c;这种搜索方式被广泛应用于电商、广告、设计以及搜索引擎等热门领域。 本文基…

Storm学习之使用官方Docker镜像快速搭建Storm运行环境

文章目录 0.前言搭建完的效果 1.教程1.1.docker 安装 zookeeper1.2. 安装 storm nimbus1.3.docker 安装 supervisor1.4.docker 安装 storm-ui1.5.查看已经启动的容器1.6.提交topology到 storm集群 2.总结3.参考文档 0.前言 Apache Storm 官方也出了Docker 镜像 https://hub.do…

npm配置最新淘宝镜像

目录 1、设置淘宝镜像2、查看源 1、设置淘宝镜像 默认的官方镜像&#xff1a;https://registry.npmjs.org&#xff0c;切换国内淘宝镜像&#xff0c;访问下载更快。 npm config set registry https://registry.npmmirror.com/其他&#xff0c;如pnpm&#xff1a; pnpm confi…

如何构建一套有效的培训系统

有效的培训系统对于组织的发展和员工的持续学习非常重要。一个好的培训系统可以提供全面的知识和技能&#xff0c;帮助员工不断成长和提升工作表现。 构建一个有效的培训系统需要确定培训目标。培训目标应该紧密与组织的战略目标相结合&#xff0c;明确员工需要掌握的技能和知…