[C++] klasy i konstruktor domniemany

arkadi
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 16 lis 2016, o 17:33
Płeć: Mężczyzna
Lokalizacja: Warszawa

[C++] klasy i konstruktor domniemany

Post autor: arkadi »

Cześć. Mam kod, w którym operuję na tablicach wskaźników do obiektów - dokonuje alokacji pierwszego elementu, inicjacji, a następnie dodaję kolejne elementy na wybrane pozycje:

Kod: Zaznacz cały

#include <iostream>

using namespace std;

struct Foo{
	string data;
};

void Alokacja(Foo ** &f, int *size)
{
    f = new Foo*[*size];

    for(int i=0; i<*size; i++)
    {
        f[i]=new Foo;
    }
}

void Inicjacja(Foo ** f, int *size)
{
    for(int i =0;i<*size;i++)
    {
        cout << "Wpisz cos: ";
        cin >> f[i]->data;
    }
}

void DodawanieNaPozycje(Foo **&f, int *size)
{
    int poz;
    cout << "Pozycja: "; //liczona od 1, nie od 0
    cin >> poz;
    if((poz<1) || (poz>(*size)+1))
    {
        cout << "Niepoprawna wartosc!";
        return;
    }
    poz--;

    Foo **x;
    x = new Foo*[*size+1];

    for(int i =0;i<*size+1;i++)
    {
        x[i]=new Foo;
    }

    for(int i =0;i<poz;i++)
    {
        *x[i]=*f[i];
    }
    for(int j=poz+1;j<=*size;j++)
    {
        *x[j]=*f[j-1];
    }

    cout << "Wpisz cos: ";
    cin >> x[poz]->data;

    for(int i =0;i<*size;i++)
        delete f[i];

    delete [] f;
    f=NULL;

    (*size)++;
    f=x;
}

int main()
{
    Foo ** f;
    int fsize=1;
    Alokacja(f,&fsize);
    Inicjacja(f,&fsize);
    DodawanieNaPozycje(f,&fsize);
    DodawanieNaPozycje(f,&fsize);
    return 0;
}
Próbuję teraz wykorzystać klasy zamiast struktur, zmienną fsize daję do klasy:

Kod: Zaznacz cały

#include <iostream>

using namespace std;

class Foo{
	string data;
public:
    int fsize=1;
    void Alokacja(Foo ** &f);
    void Inicjacja(Foo ** f);
    void DodawanieNaPozycje(Foo **&f);
    Foo()
    {
       //???
    }
};

void Foo::Alokacja(Foo ** &f)
{
    f = new Foo*[fsize];

    for(int i=0; i<fsize; i++)
    {
        f[i]=new Foo;
    }
}

void Foo::Inicjacja(Foo ** f)
{
    for(int i =0;i<fsize;i++)
    {
        cout << "Wpisz cos: ";
        cin >> f[i]->data;
    }
}

void Foo::DodawanieNaPozycje(Foo **&f)
{
    int poz;
    cout << "Pozycja: "; 
    cin >> poz;
    if((poz<1) || (poz>(fsize)+1))
    {
        cout << "Niepoprawna wartosc!";
        return;
    }
    poz--;

    Foo **x;
    x = new Foo*[fsize+1];

    for(int i =0;i<fsize+1;i++)
    {
        x[i]=new Foo;
    }

    for(int i =0;i<poz;i++)
    {
        *x[i]=*f[i];
    }
    for(int j=poz+1;j<=fsize;j++)
    {
        *x[j]=*f[j-1];
    }

        cout << "Wpisz cos: ";
        cin >> x[poz]->data;

    for(int i =0;i<fsize;i++)
        delete f[i];

        delete [] f;
        f=NULL;

    fsize++;
    f=x;
}

int main()
{
    Foo ** f;
    (*f)->Alokacja(f);
    (*f)->Inicjacja(f);
    (*f)->DodawanieNaPozycje(f);
    (*f)->DodawanieNaPozycje(f);
    return 0;
}
Program kompiluje się, jednak wyrzuca błąd przy alokacji na linii 21 "for(int i =0;i<fsize;i++)". Dlaczego to jest źle?

No i przy okazji muszę utworzyć konstruktor domyślny, lecz nie za bardzo wiem, co miałbym w nim umieścić, żeby miał on sens?
bartek118
Użytkownik
Użytkownik
Posty: 5974
Rejestracja: 28 lut 2010, o 19:45
Płeć: Mężczyzna
Lokalizacja: Toruń
Podziękował: 15 razy
Pomógł: 1251 razy

[C++] klasy i konstruktor domniemany

Post autor: bartek118 »

Nie wiadomo, czy jest to fsize klasy, z której to wołasz, czy fsize klasy będącej parametrem. Jeśli fsize klasy, z której wołasz metodę to this->fsize, a jeśli z tej f, to f->fsize.
ODPOWIEDZ