• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Destruktor c++

0 głosów
331 wizyt
pytanie zadane 7 sierpnia 2020 w C i C++ przez lujasjeden Użytkownik (860 p.)

Witam, piszę kalkulator wielomianów, właściwie drugi raz bo teraz chcę to zrobić "ładniej" i nie jestem pewny co mam wpisać w destruktor. 

main.cpp:

#include <iostream>
#include "result.h"
using namespace std;

int main()
{
    Result r(0,0);
    r.gatherWxPx();
    return 0;
}

result.h:

#include <iostream>

using namespace std;

class Result
{
private:

    int dWx; //degree of polynomial W(x)
    int dPx; //degree of polynomial P(x)

public:

    void gatherWxPx(); //gathering polynomial W(x) from user
    Result(int, int);
    ~Result();

    void addition(); //adding polynomials
    void subtraction(); //subtracting polynomials
    void multiplication(); //multiplying polynomials
    void division(); //dividing polynomials
};

gather.cpp:

#include <iostream>
#include "result.h"
using namespace std;

void Result::gatherWxPx()
{
    cout<<"Input degree of polynomial W(x): ";
    cin>>dWx;
    while (dWx<=0)
    {
        cout<<"Degree of polynomial has to be greater than 0, try again: ";
        cin>>dWx;
    }
    int HelperWx=dWx;

    cout<<"Input degree of polynomial P(x): ";
    cin>>dPx;
    while (dPx<=0)
    {
        cout<<"Degree of polynomial has to be greater than 0, try again: ";
        cin>>dPx;
    }
    int HelperPx=dPx;

    float *cWx;                  //
    cWx = new float [dWx+1];     //dynamically allocating arrays for W(x)

    cout<<"Input coefficients and constant of polynomial W(x): ";
    cout<<endl;

    for (int i=dWx; i>=0; i--)
    {
        cin>>cWx[i];     //gathering coefficients of W(x)
    }

    cout<<"W(x)= ";              //show W(x)
    for (int i=dWx; i>=0; i--)
    {
        if (cWx[i]>0 && i!=HelperWx)
        {
            cout<<"+";
        }
        if ((cWx[i]<0 && i==0 && i==dWx) || cWx[i]==-1)
        {
            cout<<"-";
        }
        if (cWx[i]!=0)
        {
            if ((cWx[i]!=1 && cWx[i]!=-1) || i==0)
            {
                cout<<cWx[i];
            }
            if (i!=0)
            {
                cout<<"x";
            }
            if (i!=0 && i!=1)
            {
                cout<<i;
            }
        }
        else if (cWx[i]==0)
        {
            HelperWx--;
        }
        if (i<=0 && HelperWx==-1)
        {
            cout<<"0";
        }
    }

    cout<<endl;

    delete [] cWx;

    float *cPx;               //
    cPx = new float [dPx+1];  //dynamically allocating arrays for P(x)
    //

    cout<<"Input coefficients and constant of polynomial P(x): ";
    cout<<endl;

    for (int i=dPx; i>=0; i--)
    {
        cin>>cPx[i];      //gathering coefficients of P(x)
    }

    cout<<"P(x)= ";             //show P(x)
    for (int i=dPx; i>=0; i--)
    {
        if (cPx[i]>0 && i!=HelperPx)
        {
            cout<<"+";
        }
        if ((cPx[i]<0 && i==0 && i==dPx) || cPx[i]==-1)
        {
            cout<<"-";
        }
        if (cPx[i]!=0)
        {
            if ((cPx[i]!=1 && cPx[i]!=-1) || i==0)
            {
                cout<<cPx[i];
            }
            if (i!=0)
            {
                cout<<"x";
            }
            if (i!=0 && i!=1)
            {
                cout<<i;
            }
        }
        else if (cPx[i]==0)
        {
            HelperPx--;
        }
        if (i<=0 && HelperPx==-1)
        {
            cout<<"0";
        }
    }
    cout<<endl;
    delete [] cPx;
}

Result::Result(int Wx, int Px)
{
    dWx=Wx;
    dPx=Px;
}

Result::~Result()
{
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}

Mój plan na program to stworzenie w osobnych plikach funkcji dodawania, odejmowania, mnozenia i dzielenia i wywolanie w mainie:

gatherWxPx()

switch z wszystkimi operacjami (dodawanie, odejmowanie, mnozenie, dzielenie)

zapetlony caly program aby sie nie wylaczal po 1 obliczeniu

I teraz pytanie: Co mam umiescic w destruktorze funkcji gatherWxPx?

Mógłbym tam dać delete [] cWx oraz delete [] cPx, ale czy moge tak zrobic? Nie wiem jak to dokladnie dziala prosze o wytlumaczenie ale na moje myslenie to jak to usune to nie bede mogl pozniej wykonywac zadnych operacji, tak czy nie? Poza tym w innych funkcjach bede mial tez inne destruktory  zapewne, chociaz nie wiem jak to dziala do konca, ale bede musial dynamicznie alokowac nowe szufladki np dla wyniku dodawania.

Destruktor znajduje sie na samym dole i jest zaznaczony wykrzyknikami.

komentarz 7 sierpnia 2020 przez j23 Mędrzec (195,220 p.)

teraz chcę to zrobić "ładniej"

To pozbądź się tych new[] i delete[] na rzecz std::vector.

1 odpowiedź

+1 głos
odpowiedź 7 sierpnia 2020 przez Michałełe Nałogowiec (25,600 p.)

to jak to usune to nie bede mogl pozniej wykonywac zadnych operacji, tak czy nie?

Jak dasz delete to zdealokujesz zajętą pamięć - nie będziesz mógł na niej operować, ale ten wskaźnik będziesz mógł ustawić aby wskazywał na coś innego

Poza tym w innych funkcjach bede mial tez inne destruktory  zapewne,

W funkcjach nie ma destruktorów - są tylko w klasach, i odpalają się one same (implicit) przed zniszczeniem obiektu (można też odpalić jawnie destruktor, ale to bardzo rzadko się zdarza)

 

A co do kodu, rzuciłem okiem i ty już dealokujesz za pomocą delete w tej funkcji gatherWxPx, także będzie to błąd jeśli zrobisz to ponownie

komentarz 7 sierpnia 2020 przez lujasjeden Użytkownik (860 p.)
Co do tego że już mam delete to wiem ale właśnie chodziło mi czy go usunąć i dać w destruktorze, ale chyba powinienem zrobić tak że wywołam konstruktor na początku w mainie potem wywołam funkcje gatherWxPx, potem dam switcha do wyboru jednej z 4 operacji a na końcu dam destruktor który posprząta wszystkie dynamicznie zaalokowane tablice. I tak będzie się wywoływać w kółko bo program będzie zapętlony, tylko czy tak mogę? W ogóle konstruktora i destruktora dać w osobnych plikach?

Podobne pytania

0 głosów
2 odpowiedzi 1,731 wizyt
pytanie zadane 19 sierpnia 2020 w C i C++ przez lujasjeden Użytkownik (860 p.)
0 głosów
1 odpowiedź 255 wizyt
pytanie zadane 30 marca 2020 w C i C++ przez Quegon23 Nowicjusz (150 p.)
+1 głos
2 odpowiedzi 236 wizyt
pytanie zadane 19 października 2015 w C i C++ przez Dash Nałogowiec (29,650 p.)

93,605 zapytań

142,529 odpowiedzi

322,999 komentarzy

63,096 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...