使用运算符重载添加两个向量

时间:2015-12-11 01:26:09

标签: c++ operator-overloading

我有一个类Vectors,它有私有动态数组。 我想要做的就是添加两个Vectors对象,比如A = A + B,但程序会一直崩溃。

这是我班级的声明:

class Vectors
    {
    private:
        int* vector;
    public:
        Vectors(int);
        Vectors(Vectors&);
        ~Vectors();

        Vectors operator+(Vectors&);

    };

这是我的实施:

#include "Vectors.h"
#include "iostream"
using namespace std;

Vectors::Vectors(int value)
{
    this->vector = new int[3];
    for (auto i = 0; i < 3; i++)
    {
        vector[i] = 3;
    }
}

Vectors::Vectors(Vectorsy& copy)
{
    this->vector = new int[3];
    for (auto i = 0; i < 3; i++)
    {
        vector[i] = copy.vector[i];
    }
}

Vectors::~Vectors()
{
    delete[] vector;
}

Vectors Vectors::operator+(Vectors& obj) // There is sth wrong here.
{
    for (auto i = 0; i < 3; i++)
        this->vector[i] += obj.vector[i];

    return *this;
}

这是我得到的错误:

enter image description here

2 个答案:

答案 0 :(得分:3)

我相信你需要一个operator=功能。你还没有实现它,所以编译器写了一个默认的错误的东西(因为类有一个指针)。很可能是在两次删除相同内存时发生崩溃。

请参阅What is The Rule of Three?

答案 1 :(得分:0)

问题是复制构造函数(Vectors :: Vectors(const Vectors&amp; copy)) 听听工作代码。

#include "iostream"
using namespace std;

class Vectors
    {
    private:
        int* vector;
    public:
        Vectors(int);
        Vectors(const Vectors&);
        ~Vectors();

        Vectors operator+(Vectors&);

    };


Vectors::Vectors(int value)
{
    this->vector = new int[3];
    for (auto i = 0; i < 3; i++)
    {
        vector[i] = 3;
    }
}

Vectors::Vectors(const Vectors& copy)
{
    this->vector = new int[3];
    for (auto i = 0; i < 3; i++)
    {
        vector[i] = copy.vector[i];
    }
}

Vectors::~Vectors()
{
    delete[] vector;
}

Vectors Vectors::operator+(Vectors& obj) // There is sth wrong here.
{
    for (auto i = 0; i < 3; i++)
        this->vector[i] += obj.vector[i];

    return *this;
}

int main()
{
        Vectors A(3), B(3);
        Vectors C = A+B;
}