#include <iostream>
using namespace std;
template<class T>
class Array
{
public:
int n;
T *p;
friend ostream& operator <<(ostream& output,Array& a);
Array(int t):n(t)
{
p=new T[t];
cout<<"分配"<<t<<"个数组元素"<<endl;
}
~Array()
{
if(p) delete[]p;
cout<<"释放数组"<<endl;
}
T& operator[](int i)
{
return *(p+i);
}
};
template<typename T>
void mysort(Array<T>&A,int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(A[j]>A[j+1])
{
int middle;
middle=A[j];
A[j]=A[j+1];
A[j+1]=middle;
}
}
}
}
template<typename T>
ostream& operator <<(ostream& output, Array& a)
{
output<<a<<endl;
return output;
}
int main()
{
int n;
cin >> n;
Array<int> a(n);
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
mysort(a, n);
for (int i = 0; i < n; i++)
{
cout << a[i] << " ";
}
cout << endl;
return 0;
}
定义流提取运算符时系统报错:Array is not a type
不知道你这个问题是否已经解决, 如果还没有解决的话:针对问题:报错说“Array不是一个类型”,可能是因为代码中定义的Array与C++中的数组类型相同,导致产生冲突。解决方法是将类名更改为一个不同的名称,例如将Array改为MyArray。更改后代码如下:
using namespace std;
class MyArray { private: int p; int n; public: MyArray() {} MyArray(int a,int b) { p = a; n = b; } friend void operator ++(MyArray& arr) { int i = 0; while (i < arr.n) { (arr.p + i) += 1; i++; } } friend void operator ++(MyArray& arr,int n) { int i = 0; while (i < arr.n) { (arr.p + i) += 1; i++; } } friend void operator --(MyArray& arr) { int i = 0; while (i < arr.n) { (arr.p + i) -= 1; i++; } } friend void operator --(MyArray& arr,int n) { int i = 0; while (i < arr.n) { (arr.p + i) -= 1; i++; } } void print() { for (int i = 0; i < n; i++) cout << setw(4) << *(p + i); cout << endl; } };
int main() { int a[7],i=0; for (i = 0; i < 7; i++) { cin >> a[i];
}
MyArray arr(a, i);
arr.print();
arr++;
arr.print();
arr.print();
arr.print();
arr++;
arr.print();
arr--;
arr.print();
arr.print();
arr.print();
--arr;
arr.print();
}