Проблемка с деструктором

  • Автор темы Guest
  • Дата начала
G

Guest

В общем изначально задание такое:
Составить описание класса многочлена от одной переменной, задаваемого степенью многочлена и массивом коэффициентов. Предусмотреть метод для вычисления значения многочлена для заданного аргумента, печать (вывод на экран) описания многочлена.
Вроде всё верно, только что-то с деструктором напутано...помогите пожалуйста!

[codebox]char StrBuf[50];

class multi
{
private:
int n;
float a[];

public:
multi();
~multi(){ delete T;};
void vichislenie();
void print();

};
multi :: multi()
{
CharToOem("Введите степень многочлена", StrBuf);
cout<<StrBuf<<endl;
cin>>n;
CharToOem("Ведите коэффициенты", StrBuf);
cout<<StrBuf<<endl;
for(int i=0; i<n+1; i++)
cin>>a;

}

void multi :: vichislenie()
{
float sum=0;
int m=n;
for(int i=0; i<n+1; i++)
{
sum=sum+a*(pow(x,m));
m=m-1;
}
CharToOem("Результат = ", StrBuf);
cout<<StrBuf<<sum<<endl;
}

void multi :: print()
{
CharToOem("Описание многочлена", StrBuf);
cout <<StrBuf<<endl;
int m=n;
for (int i=0; i<n+1; i++)
{
if(a>0)
cout<<"+"<<a<<"*x^"<<m;
else
cout<<a<<"*x^"<<m;
m=m-1;
} cout<<endl;
}
void main (void)
{
int y,x;
multi T();
bool flag=true;
while(flag==true)
{
CharToOem("Введите 1, если хотите получить результат", StrBuf);
cout<<StrBuf<<endl;
CharToOem("Введите 2, если хотите получить описание многочлена ", StrBuf);
cout<<StrBuf<<endl;
CharToOem("Введите 3, если хотите ввести новый многочлен", StrBuf);
cout<<StrBuf<<endl;
CharToOem("Введите 4, если хотите выйти", StrBuf);
cout<<StrBuf<<endl;
cin>>y;
switch(y)
{
case 1:
CharToOem("Введите значение аргумента", StrBuf);
cout<<StrBuf<<endl;
cin>>x;
T.vichislenie(); break;

case 2:
T.print(); break;
case 3: {~multi(); multi T();} break;
case 4: flag=false;
}
}

getch();
}[/codebox]
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
деструктор никогда явна вызываться не должен
его вызов происходит не явно черз delete для объектов созанных в куче, либо автоматический вызов при выходе переменной из области видимости для объектов созданный на стеке. сложные случая с раскруткой стека при исключении расматривать не будем...
 
V

vrotmnenogi

Деструктор определен неверно, будь я компилятором у меня бы тоже поехала крыша....

поменяй:

~multi(){ delete T; }

на

~multi(){}

а вот в коде, когда ты закончишь работать с Т напиши delete T;

Код:
multi T = new multi();

// используем Т

delete T;

работает это так и никак иначе...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!