首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【C++】面向对象示例 - 数组类 ( 示例需求 | 创建封装类 | 数组类头文件 Array.h | 数组类实现 Array.cpp | 测试类 Test.cpp - 主函数入口 )

【C++】面向对象示例 - 数组类 ( 示例需求 | 创建封装类 | 数组类头文件 Array.h | 数组类实现 Array.cpp | 测试类 Test.cpp - 主函数入口 )

作者头像
韩曙亮
发布2023-10-15 17:19:57
发布2023-10-15 17:19:57
5970
举报

一、示例需求

示例需求 :

实现一个 数组类 , 可以设置数组的大小 , 可以根据下标向数组中存储数据 , 可以根据下标从数组中取出数据 ;

二、创建封装类

1、创建过程

打开 Visual Studio 2019 开发环境 ,

在 " 解决方案资源管理器 " 中 , 右键点击 解决方案 , 在弹出的菜单中选择 " 添加 / 类 " 选项 ;

在弹出的 添加类 对话框 中 , 输入要创建的类名 Array ;

会自动生成 Array.h 和 Array.cpp 源码文件 ;

2、生成的类源码内容

Array.h 源码内容为 : #pragma once 的作用是防止被二次导入 , 导致 Array 类重复定义 ;

代码语言:javascript
复制
#pragma once
class Array
{
};

Array.cpp 源码内容为 : 用于实现 Array 中的成员函数 , 成员函数之前使用 Array:: 域作用符 ;

代码语言:javascript
复制
#include "Array.h"

三、数组类实现


1、数组类头文件 Array.h

在 数组类 的头文件中 , 对 成员方法 和 成员变量 进行声明定义 ;

成员方法 只进行声明 , 不进行实现 ;

该 Array 类 定义了 构造 与 析构 函数有

4

个 :

  • 无参构造函数 : Array();
  • 有参构造函数 : Array(int len);
  • 拷贝构造函数 : Array(const Array& array);
  • 析构函数 : ~Array();
代码语言:javascript
复制
public:
	// 无参构造函数
	Array();

	// 有参构造函数
	Array(int len);

	// 拷贝构造函数
	Array(const Array& array);

	// 析构函数
	~Array();

该 Array 类 定义了

3

个成员函数 :

  • 设置数组数据 成员函数 : void setData(int index, int value); 设置 index 位置的数组元素值为 value ;
  • 获取数组数据 成员函数 : int getData(int index); 获取 index 位置的数组元素值 ;
  • 获取数组长度 成员函数 : int length(); 获取数组的长度 ;
代码语言:javascript
复制
public:
	// 设置数组数据
	void setData(int index, int value);

	// 获取数组数据
	int getData(int index);

	// 获取数组长度
	int length();

代码示例 :

代码语言:javascript
复制
#pragma once

#include "iostream"
using namespace std;

class Array
{
public:
	// 无参构造函数
	Array();

	// 有参构造函数
	Array(int len);

	// 拷贝构造函数
	Array(const Array& array);

	// 析构函数
	~Array();

public:
	// 设置数组数据
	void setData(int index, int value);

	// 获取数组数据
	int getData(int index);

	// 获取数组长度
	int length();

private:
	// 数组长度
	int m_length;

	// 指向数组数据内存 的指针
	int* m_space;
};

2、数组类实现 Array.cpp

在本代码中 , 主要对 构造函数 , 析构函数 , 成员函数 进行实现 ;

注意 , 此处的拷贝构造函数 , 使用的是深拷贝机制 , 数组的内存重新进行了申请 , 然后将原数组的元素值 , 逐个复制到新数组中 ;

代码示例 :

代码语言:javascript
复制
#include "Array.h"

// 无参构造函数
Array::Array()
{
	// 设置数组长度
	m_length = 10;

	// 为数组在堆内存中分配内存
	m_space = new int[m_length];

	cout<< " 调用无参构造函数 " << endl;
}

// 有参构造函数
Array::Array(int len)
{
	// 设置数组长度
	m_length = len;

	// 为数组在堆内存中分配内存
	m_space = new int[m_length];

	cout << " 调用有参构造函数 " << endl;
}

// 拷贝构造函数
// 这是一个深拷贝 拷贝构造函数
Array::Array(const Array& array)
{
	// 设置数组长度
	m_length = array.m_length;

	// 创建数组
	m_space = new int[m_length];

	// 为数组赋值
	for (int i = 0; i < m_length; i++)
	{
		m_space[i] = array.m_space[i];
	}

	cout << " 调用拷贝构造函数 " << endl;
}

// 析构函数
Array::~Array()
{
	if (m_space != NULL)
	{
		// 释放 new int[m_length] 分配的内存 
		delete[] m_space;
		m_space = NULL;
	}

	cout << " 调用析构函数 " << endl;
}

// 设置数组数据
void Array::setData(int index, int value)
{
	m_space[index] = value;
}

// 获取数组数据
int Array::getData(int index)
{
	return m_space[index];
}

// 获取数组长度
int Array::length()
{
	return m_length;
}

3、测试类 Test.cpp - 主函数入口

在测试类中 ,

首先 , 调用有参构造函数 , 创建数组类实例对象 ;

  • 先为该实例对象设置数据 ;
  • 再将之前设置的数据打印出来 ;

然后 , 调用 拷贝构造函数 , 创建第二个实例对象 ;

  • 将第二个对象的数据打印出来 ;

最终得到的结果 , 两个对象的值完全相同 ;

代码示例 :

代码语言:javascript
复制
#include "iostream"
using namespace std;

#include "Array.h"

int main() {

	Array array(3);

	// 设置 array 数组值
	for (int i = 0; i < array.length(); i++)
	{
		array.setData(i, i + 5);
	}

	// 打印 array 数组值
	for (int i = 0; i < array.length(); i++)
	{
		cout << array.getData(i) << endl;
	}

	// 使用拷贝构造函数 赋值
	Array array2 = array;

	// 打印 array2 数组值
	for (int i = 0; i < array2.length(); i++)
	{
		cout << array2.getData(i) << endl;
	}


	// 控制台暂停 , 按任意键继续向后执行
	system("pause");

	return 0;
}

4、执行结果

执行结果 :

代码语言:javascript
复制
 调用有参构造函数
5
6
7
 调用拷贝构造函数
5
6
7
请按任意键继续. . .
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、示例需求
  • 二、创建封装类
    • 1、创建过程
    • 2、生成的类源码内容
  • 三、数组类实现
    • 1、数组类头文件 Array.h
    • 2、数组类实现 Array.cpp
    • 3、测试类 Test.cpp - 主函数入口
    • 4、执行结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档