0

我第一次使用运算符重载并且遇到了一些问题。我创建了一个将多项式存储为项数组的类,并尝试重载 operator+ 以将两个多项式相加。每当 operator+ 函数试图返回一个对象时,程序就会中断。

问题:

class Polynomial
{
    friend int coefficient( std::string & );
    friend int exponent( std::string );

public:
    explicit Polynomial( size_t = 3 ); // default constructor
    ~Polynomial(); // destructor
    void set( std::string[] ); // sets values of ptr
    std::string get(); // returns string of values from extracted from ptr

    Polynomial operator+( const Polynomial & ); // allows summation of objects

private:
    size_t size; // holds the size of array ptr[]
    std::string *ptr; // points to first element of ptr[]
};

int main()
{
    Polynomial p1(3);
    Polynomial p2 = p1;
}

此外,如果我尝试传递给一个函数,例如 Polynomial::someMemberFunction( Polynomial1 + Polynomial2 );该函数在尝试访问 sum 的ptr[]数据成员时会中断,并且调试器将返回:Unhandled exception at 0x543B6D46 (msvcp110d.dll) in SchoolProject.exe: 0xC0000005: Access violation reading location 0xFEEEFEEE.

我不知道为什么要这样做,我愿意接受任何建议。

编辑:

答案确实是我需要显式定义复制构造函数和重载赋值运算符,以便正确复制和分配对象。我重载的 operator+ 调用了隐式复制构造函数和 operator=,它们无法复制我的 *ptr 数据成员指向的信息。我已经编辑了我的问题的文本以删除不相关的信息。

4

0 回答 0