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






    一、示例需求



    示例需求 :

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





    二、创建封装类




    1、创建过程


    打开 Visual Studio 2019 开发环境 ,

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

    在这里插入图片描述

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

    在这里插入图片描述

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


    2、生成的类源码内容


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

    #pragma once
    class Array
    {
    };
    
    • 1
    • 2
    • 3
    • 4

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

    #include "Array.h"
    
    • 1




    三、数组类实现




    1、数组类头文件 Array.h


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

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


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

    • 无参构造函数 : Array();
    • 有参构造函数 : Array(int len);
    • 拷贝构造函数 : Array(const Array& array);
    • 析构函数 : ~Array();
    public:
    	// 无参构造函数
    	Array();
    
    	// 有参构造函数
    	Array(int len);
    
    	// 拷贝构造函数
    	Array(const Array& array);
    
    	// 析构函数
    	~Array();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    该 Array 类 定义了 3 3 3 个成员函数 :

    • 设置数组数据 成员函数 : void setData(int index, int value); 设置 index 位置的数组元素值为 value ;
    • 获取数组数据 成员函数 : int getData(int index); 获取 index 位置的数组元素值 ;
    • 获取数组长度 成员函数 : int length(); 获取数组的长度 ;
    public:
    	// 设置数组数据
    	void setData(int index, int value);
    
    	// 获取数组数据
    	int getData(int index);
    
    	// 获取数组长度
    	int length();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    代码示例 :

    #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;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    2、数组类实现 Array.cpp


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

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


    代码示例 :

    #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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

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


    在测试类中 ,

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

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

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

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

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


    代码示例 :

    #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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    4、执行结果


    执行结果 :

     调用有参构造函数
    5
    6
    7
     调用拷贝构造函数
    5
    6
    7
    请按任意键继续. . .
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

  • 相关阅读:
    Arrays类中常用的方法
    v-bind动态绑定style(数组)
    怎么能还不会2PC、3PC?赶快学起来
    基于微信小程序的商城设计
    java-php-net-python-房产交易资金管理系统计算机毕业设计程序
    修复微信小程序不能获取头像和昵称的bug,微信小程序新版头像昵称API使用
    未履行数据保护义务造成数据泄露,某大药房被罚110万
    nuxtJS:搭建nuxt项目(vue2)
    通过git服务提高端侧开发调试效率
    安卓开发之环境配置
  • 原文地址:https://blog.csdn.net/han1202012/article/details/133319332