У меня есть следующая основная функция, создающая произведение коэффициентов с помощью указателей. Это лишь малая часть проекта, которая используется для создания полиномов:C++ Перезапись уже определенной переменной
#include "header.h"
int main()
{
TermProd x = TermProd(new Coeff(4), new Coeff(8));
x.print(); cout << endl;
x = TermProd(new Coeff(8), new Coeff(15));
x.print(); cout << endl;
return 0;
}
После тестирования, перезапись, кажется, работает. Но когда я вызываю печать на x, я получаю ошибку сегментации. Я уже давно пытаюсь и смотрю на него, но я не могу понять настоящую проблему. Также мои поиски не привели к правильному направлению, поэтому я решил создать небольшой фрагмент кода, который воспроизводит ошибку.
Мой файл header.h выглядит следующим образом:
class Term{
public:
Term(){};
virtual ~Term(){};
virtual Term* clone() const = 0;
virtual void print() const = 0;
};
class Coeff:public Term{
int m_val; //by def: >=0
public:
// Constructor
Coeff();
Coeff(int val = 1):m_val(val)
// Copy constructor
Coeff* clone() const{return new Coeff(this->val());}
// Destructor
~Coeff(){}
// Accessors
int val() const{return m_val;} ;
// Print
void print() const{cout << m_val; }
};
class TermProd:public Term{
TermPtr m_lhs, m_rhs;
public:
// Constructor
TermProd(TermPtr lhs, TermPtr rhs):m_lhs(lhs), m_rhs(rhs){ }
// Copy constructor
TermProd* clone() const
{
return new TermProd(m_lhs->clone(), m_rhs->clone());
}
// Destructor
~TermProd(){ delete m_lhs;delete m_rhs;}
// Accessors
Term* lhs() const { return m_lhs; }
Term* rhs() const { return m_rhs; }
// Print
void print() const
{
cout << "("; m_lhs->print(); cout << '*'; m_rhs->print(); cout << ")";
}
};
Прочтите это: [Правило 3] (http://stackoverflow.com/questions/4172722/what-is-the-rule-of -three) –
@Michael он будет генерировать временный объект, который будет присвоен первому. – AlexTheo