c++ - 运算符重载未处理的异常

标签 c++ overloading

我在重载 + 运算符时遇到了一些问题。我收到运行时错误。未处理的异常后跟内存地址。

下面是我编写的代码:

#include <iostream>
#include <iomanip>
using namespace std;


class myVector{

    int vsize, maxsize;
    int* array;
    void alloc_new();

    friend ostream& operator<< (ostream &out, myVector&);
    friend istream& operator>> (istream &in, myVector&);


public:
     myVector();
     myVector(int);
    myVector(const myVector&);   //copy constructor
    ~myVector();
    void push_back(int);
    int size();
    int operator[](int);
    myVector operator+(myVector&);
    int at(int i);
};

 myVector::myVector()
{
    maxsize = 20;
    array = new int[maxsize];
    vsize = 0;

}

myVector::myVector(int i)
{

    maxsize = i;
    array = new int[maxsize];
    vsize = 0;

}

myVector::myVector(const myVector& v){}

myVector::~myVector()
{
    delete[] array;
}

void myVector::push_back(int i)
{

    if (vsize + 1 > maxsize)
        alloc_new();
    array[vsize] = i;
    vsize++;
}

int myVector::operator[](int i)
{
    return array[i];
}

int myVector::at(int i)
{
    if (i < vsize)
        return array[i];
        throw 10;
}

void myVector::alloc_new()
{
    maxsize = vsize * 2;
    int* tmp = new int[maxsize];
    for (int i = 0; i < vsize; i++)
        tmp[i] = array[i];
    delete[] array;
    array = tmp;
}

int myVector::size()
{
    return vsize;
}

myVector myVector::operator+(myVector& a)
{
    myVector result;
    for (int i = 0; i < a.size(); i++)
        result.array[i] = this->array[i] + a.array[i];
    return result;

}

ostream& operator<< (ostream &out, myVector& a)
{ 
    for (int i = 0; i < a.size(); i++)
        out << a[i] << " ";
    return out;
}

istream& operator>> (istream &in, myVector& a)
{
    int tmp, lol;
    cin >> tmp;

    for (int i = 0; i < tmp; i++)
    {
        cin >> lol;
        a.push_back(lol);
    }
    return in;
}



int main()
{

    myVector vec;
    myVector vec2;
    myVector c;
    int width = 15;

    cout << "Input vector a\n";
    cin >> vec;                                                 // In: 3 1 2 3

    cout << "Input vector b\n";
    cin >> vec2;                                                    // In: 3 4 5 6

    cout << setw(width) << "Vector a: " << vec << endl;
    cout << setw(width) << "Vector b: " << vec2 << endl;


    cout << setw(width) << "c = a + b: " << c << endl;
    c = vec + vec2;


    system("PAUSE");
    return 0;
}

我将如何为动态数组编写复制构造函数?这是我现在拥有的:

    myVector::myVector(const myVector &initial)
{
    int* tmp = new int[3];
    for (int i = 0; i < 3; i++)
        tmp[i] = initial.array[i];
    delete[] array;
    array = tmp;

}

最佳答案

当您在 operator+ 中分配结果时,您没有做任何事情来在结果 vector 中保留空间。

(您应该在运行时检查(断言或类似)中大量使用您的类,以对每个方法的所有输入进行完整性检查。这将向您表明您的结果索引器传递了一个 vector 中不存在的索引。)

关于c++ - 运算符重载未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20728966/

相关文章:

c++ - 为什么重写的虚方法不能在没有显式作用域的情况下看到重载的基类版本?

java - Scala 2.9.2 无法处理 String 类的重载格式方法 - 为什么?

iphone - 重载iPhone "GO"按钮来执行操作

c++ - 使用 STL 的类模板无法编译

c++ - 正确关闭 WinAPI HANDLEs(避免重复关闭)

c++ - ISO C++ 禁止声明没有类型的 ‘transpose’ [-fpermissive]

c++ - 按字母顺序将对象插入 vector C++

c++ - 位反转 : Generating Bit Reversal Lookup Table for N-Bits

c++ - 访问 map 中的分区 vector

C++ 运算符重载调用析构函数