注册 登录
编程论坛 C++教室

看看我的运算符重载哪里错了,运行不了

新人学习 发布于 2018-01-18 13:50, 1310 次点击
#include<iostream>

using namespace std;

class A
{
private:
    int n;
    int *p;
    friend A  operator+(A &a1, A &a2);    //友元函数
public:
    A(int i = 0)                     //构造函数   为n赋值  为指针p定义元素个数
    {
        if (i < 0)
        {
            i = 0;

        }
        n = i;
        p = new int[n];
    }
    ~A()                            //析构函数
    {
        if (p != NULL)
            delete[]p;
    }
    void SetA()              //赋值
    {
        for (int i = 0; i < n; i++)
            p[i] = i;
    }
    void Display()                //打印
    {
        for (int i = 0; i < n; i++)
            cout << p[i] << " ";
        cout << endl;
    }
};
A  operator+(A &a1, A &a2)            //运算符+号重载
{
    A temp(10);

    for (int i = 0; i < a1.n && i<a2.n; i++)
    {
        temp.p[i] = a1.p[i] + a2.p[i];
    }
    return temp;
}
int main()
{
    A b1(10), b2(10);
    b1.SetA();      //赋值
    b2.SetA();      //赋值
    A b3(10);       //定义b3的p指针的int元素个数

    b3 = b1 + b2;   //程序到这里就要响一下声音 就没反应了
    b1.Display();
    b2.Display();
    b3.Display();

    system("pause");
    return 0;
}
2 回复
#2
rjsp2018-01-18 15:07
缺少 拷贝构造函数 和 赋值操作
A temp(10) 析构时实际内存被释放掉一次,b1 + b2 这个临时对象析构时重复释放一次,b3 析构时再次重复释放一次。
#3
新人学习2018-01-19 14:46


temp这个析构了一次 我明白了
1