示例需求 :
实现一个 数组类 , 可以设置数组的大小 , 可以根据下标向数组中存储数据 , 可以根据下标从数组中取出数据 ;
打开 Visual Studio 2019 开发环境 ,
在 " 解决方案资源管理器 " 中 , 右键点击 解决方案 , 在弹出的菜单中选择 " 添加 / 类 " 选项 ;
在弹出的 添加类 对话框 中 , 输入要创建的类名 Array ;
会自动生成 Array.h 和 Array.cpp 源码文件 ;
Array.h 源码内容为 : #pragma once 的作用是防止被二次导入 , 导致 Array 类重复定义 ;
#pragma once
class Array
{
};
Array.cpp 源码内容为 : 用于实现 Array 中的成员函数 , 成员函数之前使用 Array:: 域作用符 ;
#include "Array.h"
在 数组类 的头文件中 , 对 成员方法 和 成员变量 进行声明定义 ;
成员方法 只进行声明 , 不进行实现 ;
该 Array 类 定义了 构造 与 析构 函数有 4 4 4 个 :
public:
// 无参构造函数
Array();
// 有参构造函数
Array(int len);
// 拷贝构造函数
Array(const Array& array);
// 析构函数
~Array();
该 Array 类 定义了 3 3 3 个成员函数 :
public:
// 设置数组数据
void setData(int index, int value);
// 获取数组数据
int getData(int index);
// 获取数组长度
int length();
代码示例 :
#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;
};
在本代码中 , 主要对 构造函数 , 析构函数 , 成员函数 进行实现 ;
注意 , 此处的拷贝构造函数 , 使用的是深拷贝机制 , 数组的内存重新进行了申请 , 然后将原数组的元素值 , 逐个复制到新数组中 ;
代码示例 :
#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;
}
在测试类中 ,
首先 , 调用有参构造函数 , 创建数组类实例对象 ;
然后 , 调用 拷贝构造函数 , 创建第二个实例对象 ;
最终得到的结果 , 两个对象的值完全相同 ;
代码示例 :
#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;
}
执行结果 :
调用有参构造函数
5
6
7
调用拷贝构造函数
5
6
7
请按任意键继续. . .