C++ 动态数组类模板实现及运算符重载
C++ 动态数组类模板实现及运算符重载
本文将使用类模板定义一个动态数组类 Array,并实现以下功能:
- 动态数组类采用类模板的方式定义;
- 实现以下代码中的函数;
- 重载“<<”运算符为非成员函数,完成数组元素的输出,每个元素之间以“,”分割;
- 在主函数中定义两个动态数组对象,通过键盘输入完成数组内每个元素的赋值,调用“<<”完成数组元素的输出,调用“+”完成数组元素的拼接。
- 能运行出来
代码实现
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 著作权归作者所有。请勿转载和采集!