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

Тема в разделе "Общие вопросы по С и С++", создана пользователем -, 12 дек 2008.

  1. Гость

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

    [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]
     
  2. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    деструктор никогда явна вызываться не должен
    его вызов происходит не явно черз delete для объектов созанных в куче, либо автоматический вызов при выходе переменной из области видимости для объектов созданный на стеке. сложные случая с раскруткой стека при исключении расматривать не будем...
     
  3. Гость

    а как его тогда можно вызвать?
     
  4. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
     
  5. vrotmnenogi

    vrotmnenogi Гость

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

    поменяй:

    ~multi(){ delete T; }

    на

    ~multi(){}

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

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

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

    delete T;
    работает это так и никак иначе...
     
Загрузка...
Похожие Темы - Проблемка деструктором
  1. Tarik
    Ответов:
    3
    Просмотров:
    560
  2. Antiseptik
    Ответов:
    3
    Просмотров:
    892
  3. Wolfises
    Ответов:
    2
    Просмотров:
    2.101
  4. Sangitam
    Ответов:
    4
    Просмотров:
    3.309
  5. kaskad755
    Ответов:
    4
    Просмотров:
    2.466

Поделиться этой страницей