一、主要目的
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操作符进行销毁,否则会导致内存泄漏。