我第一次使用运算符重载并遇到了一些问题。我创建了一个类,它将多项式存储为一个术语数组,并尝试重载operator +以添加两个多项式togeather。每次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 =,它们无法复制my * ptr数据成员指向的信息。我已编辑了我的问题文本以删除不相关的信息。