设计一个数组类模板,该模板至少包含对数组元素的初始化、输出所有数组元素、输入所有数组元素、求某一个数组元素、修改某一个数组元素、求数组元素个数,对数组元素进行排序。设计一个自定义类并重载必要的输入输出运算符函数以实例化该模板测试其相关功能。
时间: 2024-01-13 19:05:46 浏览: 80
一维数组元素的引用-C++程序设计(谭浩强完整版)
下面是数组类模板的实现:
```c++
template <typename T>
class Array {
private:
T* arr; // 数组指针
int size; // 数组元素个数
public:
// 构造函数
Array(int n = 0) {
size = n;
arr = new T[size];
}
// 初始化数组元素
void init() {
for (int i = 0; i < size; ++i) {
cin >> arr[i];
}
}
// 输出所有数组元素
void print() const {
for (int i = 0; i < size; ++i) {
cout << arr[i] << " ";
}
cout << endl;
}
// 输入所有数组元素
void input() {
for (int i = 0; i < size; ++i) {
cin >> arr[i];
}
}
// 求某一个数组元素
T get(int index) const {
if (index >= 0 && index < size) {
return arr[index];
}
return T();
}
// 修改某一个数组元素
void set(int index, T value) {
if (index >= 0 && index < size) {
arr[index] = value;
}
}
// 求数组元素个数
int length() const {
return size;
}
// 对数组元素进行排序
void sort() {
std::sort(arr, arr + size);
}
~Array() {
delete[] arr;
}
};
```
下面是自定义类的实现,重载了输入输出运算符:
```c++
class Person {
private:
string name;
int age;
public:
Person() : name(""), age(0) {}
Person(const string& n, int a) : name(n), age(a) {}
friend istream& operator>>(istream& in, Person& p) {
in >> p.name >> p.age;
return in;
}
friend ostream& operator<<(ostream& out, const Person& p) {
out << "Name: " << p.name << ", Age: " << p.age;
return out;
}
};
```
下面是测试程序的实现:
```c++
int main() {
// 测试int类型数组
Array<int> arr(5);
cout << "Please input 5 integers:" << endl;
arr.input();
cout << "The array is: ";
arr.print();
cout << "The length of array is: " << arr.length() << endl;
cout << "The first element is: " << arr.get(0) << endl;
arr.set(0, 100);
cout << "After set the first element to 100, the array is: ";
arr.print();
arr.sort();
cout << "After sort the array, the array is: ";
arr.print();
// 测试自定义类Person类型数组
Array<Person> personArray(2);
cout << "Please input 2 persons' name and age:" << endl;
personArray.init();
cout << "The person array is: " << endl;
personArray.print();
return 0;
}
```
阅读全文