我第一次使用运算符重载并且遇到了一些问题。我创建了一个将多项式存储为项数组的类,并尝试重载 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 数据成员指向的信息。我已经编辑了我的问题的文本以删除不相关的信息。