21.04.21-二维数组运算符重载+,[]

本文介绍如何在C++中定义一个二维数组类并重载运算符"+"和"[]"。+运算符用于实现两个二维数组的相加,其中一个数组在构造函数中初始化,另一个由用户输入。[]运算符则允许按行索引二维数组,当索引超出范围时输出"下标越界!"并返回-1。

题目:

定义一个二维数组类,原型可参考如下代码,重载运算符“+”和“[]"。要求:

1、+运算符实现两个二维数组相加,一个二维数组在主函数内初始化传递给类的构造函数,第二个二维数组由用户输入。

2、[]运算符将二维数组按行进行索引,返回0~N*N-1之间的索引的数组元素值,如果输入参数不在范围内,输出”下标越界!",返回-1.


class matrix

{
    
        int m[N][N];

     public:

     matrix(int a[][]);//构造函数

     int operator[]();//[]运算符重载

     matrix operator+(matrix& b);//+运算符重载

     void print();//输出

} ```

参考:

#include <iostream>
using namespace std;
const int N = 3;
class matrix
{
   
   
private:
	int m[N][N];
public:
	matrix(
C++中,通过重载下标运算符`[]`可以让用户自定义类型的对象像访问数组一样操作数据成员。对于二维数组来说,我们通常需要两次使用下标运算符来完成元素的定位。 ### 实现步骤 假设我们需要创建一个类 `Matrix` 来表示二维数组,并支持类似矩阵的操作: #### 示例代码 ```cpp #include <iostream> using namespace std; class Matrix { private: int rows; // 行数 int cols; // 列数 int** data; // 动态分配的二维数组 public: // 构造函数初始化二维数组 Matrix(int r, int c) : rows(r), cols(c) { data = new int*[rows]; for (int i = 0; i < rows; ++i) { data[i] = new int[cols]{}; } } // 拷贝构造函数、析构函数等省略... // 下标运算符的一级重载返回某一行 int* operator[](int rowIndex) { if (rowIndex >= rows || rowIndex < 0) throw out_of_range("Row index is out of range"); return data[rowIndex]; // 返回指向该行的指针 } // 获取列值的常量版本(防止修改) const int* operator[](int rowIndex) const { if (rowIndex >= rows || rowIndex < 0) throw out_of_range("Row index is out of range"); return data[rowIndex]; } ~Matrix() { // 析构函数释放动态内存 for (int i = 0; i < rows; ++i) delete[] data[i]; delete[] data; } void display() { for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { cout << (*this)[i][j] << " "; // 使用operator[] } cout << endl; } } }; int main() { Matrix m(3, 4); m[1][2] = 5; // 调用重载后的 [] 运算符设置值 m.display(); // 显示结果 try { cout << m[10][0]; // 测试越界检查 } catch (const exception& e) { cerr << e.what() << '\n'; // 输出错误信息 } return 0; } ``` --- ### 工作原理解析 1. **一级下标运算符** - 首先我们在类内重载了单个`[]`运算符,它接受一个整型作为索引参数。 - 我们将这一层理解为获取“某一维度”,即指定具体的行号并返回其对应的数据地址(如上例中的`data[rowIndex]`)。 2. **二级下标运算符** - 第一次调用了`matrixObj[index_row][]`, 得到的是指向当前行的一个指针;然后第二次直接对这个指针对应的内容应用普通的 C 数组语法 `[index_col]` 即可最终取得目标位置处存储的数据项。 3. **边界条件检测** - 当然,在实际项目里建议加入必要的异常处理机制以免发生非法存取的问题,比如超出预先设定大小等情况下的报错提示功能就显得尤为重要啦! ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huber Wong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值