重载运算符问题“=”“<<”“>>”

先看代码

#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;
}

img


我的“=”重载是有问题吗,为什么会报错

删除掉上面那个问题那部分main函数代码

img

发现我的“>>”"<<"重载好像没有发挥作用,为什么这么这一部分的输入和输出

等于要求的参数是引用类型,但减法返回类型不是引用类型,所以类型不一致