赞
踩
在之前的博客 【C++】面向对象示例 - 数组类 ( 示例需求 | 创建封装类 | 数组类头文件 Array.h | 数组类实现 Array.cpp | 测试类 Test.cpp - 主函数入口 ) 中 , 实现了一个数组类 , 在一个类中 , 封装了一个 int 类型的指针 , 该指针指向堆内存的 内存空间 , 用于存放一个数组 ;
核心是 2 2 2 个成员变量 , 记录指向堆内存的指针 , 和 数组长度 ;
private:
// 数组长度
int m_length;
// 指向数组数据内存 的指针
int* m_space;
数组都可以使用下标进行访问 , 如果要使用下标访问 自定义 Array 类对象 , 需要重载 [] 下标运算符 ;
下面基于 博客 【C++】面向对象示例 - 数组类 ( 示例需求 | 创建封装类 | 数组类头文件 Array.h | 数组类实现 Array.cpp | 测试类 Test.cpp - 主函数入口 ) 中 的代码 , 重载 数组下标 [] 操作符 ;
使用 成员函数 实现 下标 [] 运算符重载 :
operate[]
;operate[]
operator[](int i)
int& operator[](int i)
// 数组下标 [] 操作符重载
int& Array::operator[](int i)
{
return m_space[i];
}
在测试类中 , 使用数组下标为数组设置值 , 并使用数组下标操作符获取数组元素的值 ;
Array array(3);
// 设置 array 数组值
for (int i = 0; i < array.length(); i++)
{
//array.setData(i, i + 5);
array[i] = i + 5;
}
// 打印 array 数组值
for (int i = 0; i < array.length(); i++)
{
//cout << array.getData(i) << endl;
cout << array[i] << endl;
}
#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(); public: // 数组下标 [] 操作符重载 int& operator[](int i); 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; } // 数组下标 [] 操作符重载 int& Array::operator[](int i) { return m_space[i]; }
#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[i] = i + 5; } // 打印 array 数组值 for (int i = 0; i < array.length(); i++) { //cout << array.getData(i) << endl; cout << array[i] << endl; } // 使用拷贝构造函数 赋值 Array array2 = array; // 打印 array2 数组值 for (int i = 0; i < array2.length(); i++) { //cout << array2.getData(i) << endl; cout << array2[i] << endl; } // 控制台暂停 , 按任意键继续向后执行 system("pause"); return 0; }
执行结果 :
调用有参构造函数
5
6
7
调用拷贝构造函数
5
6
7
请按任意键继续. . .
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。