C++ 动态数组类模板实现及运算符重载

本文将使用类模板定义一个动态数组类 Array,并实现以下功能:

  1. 动态数组类采用类模板的方式定义;
  2. 实现以下代码中的函数;
  3. 重载“<<”运算符为非成员函数,完成数组元素的输出,每个元素之间以“,”分割;
  4. 在主函数中定义两个动态数组对象,通过键盘输入完成数组内每个元素的赋值,调用“<<”完成数组元素的输出,调用“+”完成数组元素的拼接。
  5. 能运行出来

代码实现

class Array {
public:
	Array(int size = 50);
	Array(const Array<T>& a);
	~Array();
	T & operator [](int i);     //重载"[]"
	Array<T> & operator+ (Array<T> &rhs);   //重载 "+", 完成两个数组内容的拼接
	int getsize(); //返回数组大小
	template<class T>
	friend ostream& operator<<(ostream& os, Array<T>& a);
private:
	T* list;
	int size;
};

//构造函数
template<class T>
Array<T>::Array(int size) {
	this->size = size;
	list = new T[size];
}

//拷贝构造函数
template<class T>
Array<T>::Array(const Array<T>& a) {
	size = a.size;
	list = new T[size];
	for (int i = 0; i < size; i++) {
		list[i] = a.list[i];
	}
}

//析构函数
template<class T>
Array<T>::~Array() {
	delete[] list;
}

//重载"[]"
template<class T>
T& Array<T>::operator[](int i) {
	return list[i];
}

//重载"+"
template<class T>
Array<T>& Array<T>::operator+(Array<T>& rhs) {
	Array<T>* result = new Array<T>(size + rhs.size);
	for (int i = 0; i < size; i++) {
		(*result)[i] = list[i];
	}
	for (int i = 0; i < rhs.size; i++) {
		(*result)[size + i] = rhs.list[i];
	}
	return *result;
}

//返回数组大小
template<class T>
int Array<T>::getsize() {
	return size;
}

//重载"<<", 非成员函数
template<class T>
ostream& operator<<(ostream& os, Array<T>& a) {
	for (int i = 0; i < a.size; i++) {
		os << a.list[i];
		if (i != a.size - 1) {
			os << ",";
		}
	}
	return os;
}

使用示例

int main() {
	Array<int> arr1(5);
	Array<int> arr2(3);
	cout << "请输入第一个数组的元素:" << endl;
	for (int i = 0; i < arr1.getsize(); i++) {
		cin >> arr1[i];
	}
	cout << "请输入第二个数组的元素:" << endl;
	for (int i = 0; i < arr2.getsize(); i++) {
		cin >> arr2[i];
	}
	cout << "第一个数组的元素为:" << arr1 << endl;
	cout << "第二个数组的元素为:" << arr2 << endl;
	Array<int> arr3 = arr1 + arr2;
	cout << "拼接后的数组元素为:" << arr3 << endl;
	return 0;
}

说明

  • Array<T> 类模板定义了一个动态数组类,其中 T 代表数组元素的类型。
  • 构造函数用于初始化数组,拷贝构造函数用于创建数组的副本,析构函数用于释放数组占用的内存空间。
  • 重载 [] 运算符用于访问数组元素,重载 + 运算符用于将两个数组拼接成一个新的数组。
  • 重载 << 运算符用于输出数组元素,以逗号分隔。
  • 代码示例演示了如何使用 Array 类创建数组对象、输入数组元素、输出数组元素以及拼接数组。

总结

本文介绍了如何使用类模板定义动态数组类,并实现了常见的成员函数和运算符重载。通过使用类模板,我们可以方便地创建不同类型元素的动态数组。


原文地址: https://www.cveoy.top/t/topic/oBhc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录