二维数组array类的设计并重载下标和运算符、函数调用运算符

一、主要目的

1、理解二维数组类对象的使用方式并设计二维数组类;

2、掌握运算符重载的基本语法;

3、用成员函数方式重载下标运算符和函数调用运算符;

4、二维数组array2类的设计并重载下标运算符、函数调用运算符。

二、运行原理

1. array1类是这个程序中的基础类,它表示一个一维数组。类中通过new操作符动态创建了一个一维数组,数组的大小是静态成员size。同时,类中重载了运算符,以便可以通过下标访问和修改数组中的元素。还重载了<<运算符,使得可以直接通过cout打印出数组中的所有元素。

2. array2类是一个更高层次的类,它表示一个二维数组。类中通过new操作符动态创建了一个array1对象的数组,数组的大小是静态成员size。也就是说,array2类是一个由一维数组组成的二维数组。类中同样重载了<<运算符。

3. 在main函数中,首先创建了一个array2对象abc,然后通过abc[2][0] = 6;修改了二维数组中的一个元素,最后通过cout << abc;打印出了二维数组中的所有元素。

三、代码实现

#include "array1.h"

#include <stdlib.h>

//#include <iomanip.h>

int array1::size = 3;

array1::array1()

{

      a = new int[size];

      for (int i = 0; i < size; i++)

             a[i] = i + 1;

}

array1::~array1()

{

      delete [] a;

}

bool array1:: operator()(int index)

{

      return index >=0 && index < size;

}

int & array1:: operator[](int index)

{

      if (!array1::operator()(index))

      {

             cout << "列下标越界";

             exit(-1);

      }

      return a[index];

}

ostream& operator << (ostream & out, array1& arr)

{

      for (int i = 0; i < arr.size; i++)

             out << "   "<<arr.a[i];     

      out << endl;

      return out;

}

#include "array2.h"

#include <stdlib.h>

int array2::size = 4;

array2::array2()

{

      a = new array1[size];

}

array2::~array2()

{

      delete[] a;

}

bool array2:: operator()(int index)

{

      return (index >= 0 && index < size);

}

array1 & array2:: operator[](int index)

{

      if (!operator()(index))

      {

             cout << "行下标越界";

             exit(-1);

      }

      return a[index];

}

ostream& operator << (ostream & out, array2& arr)

{

      for (int i = 0; i < arr.size; i++)

             out << arr.a[i];

      return out;

}

#include "array2.h"

int main()

{

      array2 abc;

      abc[2][0] = 6;

      cout << abc;

    return 0;

}

#include <iostream>

using namespace std;

class array1 {

public:

      array1();

      ~array1();

      int & operator[](int index);

      bool operator()(int index);

      friend ostream& operator <<(ostream &out, array1&arr);

private :

      int *a;

      static int size;

};#include"array1.h"

class array2 {

public:

      array2();

      ~array2();

      array1 & operator[](int index);

      bool operator()(int index);

      friend ostream& operator <<(ostream &out, array2&arr);

private:

      array1 *a;

      static int size;

};

四、结果展现

五、小结

1. C++中的类可以很方便地封装数据和相关的操作,使得代码更加清晰和易于理解。

2. C++允许对运算符进行重载,这使得我们可以以更自然的方式来操作自定义的数据类型。

3. 动态内存分配是C++中的一个重要特性,它使得我们可以在运行时创建和销毁对象。

4. 使用new操作符动态创建的对象在不再需要时必须通过delete操作符进行销毁,否则会导致内存泄漏。

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xixixi77777

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

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

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

打赏作者

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

抵扣说明:

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

余额充值