Własny konstruktor kopiujący

0

Witam mam problem z konstruktorem kopiującym.Otóż chciałbym skopiować obiekt. przykładowo taki

class Moja{
public:
int x,y;
Moja *tab[10];
}

Nie wiem jak przekopiować tą tablicę wskaźników do obiektów.Próbowałem kopiować po prostu konstruktorem kopiującym wygenerowanym niejawnie ale tego co trzeba nie ma potem w tej tablicy.Nie mogę nigdzie znaleźć odpowiedzi na moje pytanie.Chyba ,że szukać nie umiem.

0
Moja::Moja(const Moja& m)
{
    this->x = m.x;
    this->y = m.y;
    this->tab = new Moja * [ 10 ];
    for ( unsigned j = 0 ; j < 10 ; ++j)
    {
        this->tab[j] = m.tab[j] ;
    }
}
0

@lordmonkey chyba ten new coś nie pasuje :)

0
    Moja(Moja &m) {
        x=m.x;
        y=m.y;
        for (int i=0;i<=9;i++)
            tab[i]=m.tab[i];
    }
0

@lordmonkey brawo, zrobiłeś właściwie prawie to samo co by wygenerował kompilator (z tą różnicą że kod kompilatora by się kompilował...)
@Azarien a ty na oko zrobiłeś dokładnie to co zrobiłby ten wygenerowany ;]

Moja::Moja(const Moja& m)
{
    this->x = m.x;
    this->y = m.y;
    for ( int i = 0 ; i < 10 ;i++)
    {
        this->tab[i] = new Moja(m.tab[i].x,m.tab[i].y); //strzelam że taki masz tam konstruktor
    }
}

raczej chodzilo o coś takiego

0

Shalom: a co z tablicami „Mojich” wewnątrz oryginalnej tablicy? jak już chcesz tak robić, to trzeba rekurencyjnie wszystko w głąb kopiować.
I sprawdzać, czy gdzieś nie ma NULL… ;-)

0

Masz rację, ale wtedy robi się z tego mała "masakra" rekurencyjna ;] Może jednak autor sprecyzuje co miał na myśli ;]

0
Shalom napisał(a)

Masz rację, ale wtedy robi się z tego mała "masakra" rekurencyjna ;] Może jednak autor sprecyzuje co miał na myśli ;]

No jak masz takie drzewko to bez rekurencji nie przejdzie, chyba...
że jakoś by to przeorganizować i zrobić to na jakimś własnym stosie, na którym by pracowała pętla, zamiast rekurencyjnie wołać

ale ty jak w morde strzelił pasuje rekurencja :>

0

Dajmy na to ,że tylko jeden poziom w dół chcę żebym mógł porównać czy x,y są takie same w innych obiektach nie nic więcej.Tablicy w tablicy tablic nie chcę kopiować:P jeśli to o to chodzi

0
Shalom napisał(a)
Moja::Moja(const Moja& m)
{
    this->x = m.x;
    this->y = m.y;
    for ( int i = 0 ; i < 10 ;i++)
    {
        this->tab[i] = new Moja(m.tab[i].x,m.tab[i].y); //strzelam że taki masz tam konstruktor
    }
}

A czemu nie konstruktor kopiujący wewnątrz konstruktora kopiującego? Przecież aż się o to prosi, by mieć dokładną kopię całego drzewa.

Moja::Moja(const Moja& m)
{
    this->x = m.x;
    this->y = m.y;
    for ( int i = 0 ; i < 10 ;i++) {
        if (m.tab[i]!=0) { // niezbędne dla tej rekurencji
            this->tab[i] = new Moja(*m.tab[i]);
        }
    }
}
0

@MarekR22 przyznam się że jak to pisałem to zapomniałem zwyczajnie o tej tablicy ;] Twoje rozwiązanie jest ok o ile te nulle tam faktycznie będą :)

0

Jednak ten mój sposób zaciągnął mnie w kozi róg.Ogólnie ta cała klasa miała służyć reprezentacji grafu.Mam pokolorować wierzchołki tak aby żadne sąsiednie nie były tego samego koloru przy użyciu góra 4 kolorów.Musze wykombinować jakiś inny sposób.

1 użytkowników online, w tym zalogowanych: 0, gości: 1