先看代码
#include
using namespace std;
class Vector
{
private:
double* v;
int len;
public:
Vector(int size);
Vector(double*, int);
~Vector();
double& operator[](int i);
Vector& operator =(Vector&);
friend Vector operator +(Vector&, Vector&);
friend Vector operator - (Vector&, Vector&);
friend double operator *(Vector&, Vector&);
friend ostream& operator <<(ostream& output, Vector&);
friend istream& operator >>(istream& input, Vector&);
};
Vector::Vector(int size)
{
if (size = 0 || size >= 2147483647)
{
cout << "The size of" << size << "is overflow!" << endl;
abort();
}
v = new double[size];
for (int i = 0; i < size; i++)
v[i] = 0;
len = size;
}
Vector::Vector(double* C, int size)
{
if (size = 0 || size >= 2147483647)
{
cout << "The size of" << size << "is overflow!" << endl;
abort();
}
v = new double[size];
for (int i = 0; i < size; i++)
v[i] = C[i];
len = size;
}
Vector::~Vector()
{
delete[]v;
v = NULL;
len = 0;
}
double& Vector::operator[](int i)
{
if (i >= 0 && i < len)
return v[i];
else
{
cout << "The size of" << i << "is overflow!" << endl;
abort();
}
}
Vector& Vector::operator=(Vector& C)
{
if (len == C.len)
{
for (int i = 0; i < len; i++)
v[i] = C.v[i];
return *this;
}
else
{
cout << "Operator = fail!" << endl;
abort();
}
}
Vector operator+(Vector& A, Vector& B)
{
int size = A.len;
double* T = new double[size];
if (size == B.len)
{
for (int i = 0; i < size; i++)
T[i] = A[i] + B[i];
return Vector(T, size);
}
else
{
cout << "Operator + fail!" << endl;
abort();
}
}
Vector operator-(Vector& A, Vector& B)
{
int size = A.len;
double* T = new double[size];
if (size == B.len)
{
for (int i = 0; i < size; i++)
T[i] = A[i] - B[i];
return Vector(T, size);
}
else
{
cout << "Operator - fail!" << endl;
abort();
}
}
double operator*(Vector& A, Vector& B)
{
double s = 0;
if (A.len == B.len)
{
for (int i = 0; i < A.len; i++)
s += A.v[i] * B.v[i];
return s;
}
else
{
cout << "Oerator * fail!" << endl;
abort();
}
}
ostream& operator<<(ostream& cout, Vector& A)
{
int i;
cout << "(";
for (i = 0; i < A.len - 1; i++)
cout << A.v[i] << ",";
cout << A.v[i] << ")" << endl;
return cout;
}
istream& operator>>(istream& cin, Vector& A)
{
for (int i = 0; i < A.len; i++)
cin >> A.v[i];
return cin;
}
int main()
{
int k1, k2, k3; double t;
cout << "Input the length of Vector A:\n";
cin >> k1;
Vector A(k1);
cout << "Input the elements of Vector A:\n";
cin >> A;
cout << "Input the length of Vector B:\n";
cin >> k2;
Vector B(k2);
cout << "Input the elements of Vector B:\n";
cin >> B;
cout << "Input the length of Vector C:\n";
cin >> k3;
Vector C(k3);
cout << "A=" << A << endl;
cout << "B=" << B << endl;
C = A + B;
cout << "A+B=" << A << "+" << B << "=" << C << endl;
C = A - B;
t = A * B;
cout << "A*B=" << A << "*" << B << "=" << t << endl;
}
删除掉上面那个问题那部分main函数代码
发现我的“>>”"<<"重载好像没有发挥作用,为什么这么这一部分的输入和输出
等于要求的参数是引用类型,但减法返回类型不是引用类型,所以类型不一致