Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Konstruktor kopiujący

Ostatnio zmodyfikowano 2015-10-11 12:41
Autor Wiadomość
ast44
Temat założony przez niniejszego użytkownika
Konstruktor kopiujący
» 2015-10-10 22:29:56
Chciałem zrobić konstruktor kopiujący ponieważ mam dynamiczną tablicę.Ale coś mi nie wychodzi (program się zawiesza) :

C/C++
#include <iostream>

using namespace std;

class Klasa
{
public:
   
    int x, wiersze = 4, kolumny = 4;
    double ** macierz;
   
    Klasa( int _x )
    {
        int i, j;
        x = _x;
       
        macierz = new double *[ kolumny ];
       
        for( i = 0; i < kolumny; i++ )
        {
            macierz[ i ] = new double[ wiersze ];
           
            for( j = 0; j < wiersze; j++ )
            {
                macierz[ i ][ j ] = i + j;
            }
        }
       
    }
   
    Klasa( const Klasa & kl )
    {
        if( this != & kl )
        {
            this->x = kl.x;
            int i, j;
           
            for( i = 0; i < kl.kolumny; i++ )
            {
                this->macierz = new double *[ kl.wiersze ];
               
                for( j = 0; j < kl.wiersze; j++ )
                {
                    this->macierz[ i ][ j ] = macierz[ i ][ j ];
                }
            }
        }
       
        else
        {
            cout << "Ten sam obiekt" << endl;
        }
    }
   
    void wypisz()
    {
        int i, j;
       
        for( i = 0; i < kolumny; i++ )
        {
            for( j = 0; j < wiersze; j++ )
            {
                cout << macierz[ i ][ j ];
            }
            cout << endl;
        }
    }
    ~Klasa()
    {
        int i;
        for( i = 0; i < kolumny; i++ )
        {
            delete[] macierz[ i ];
        }
       
        delete[] macierz;
        macierz = NULL;
    }
};

int main()
{
    Klasa kl_1( 1 ), kl_2( kl_1 );
   
    return 0;
}
P-138375
mateczek
» 2015-10-10 23:04:10
w kopiującym masz tylko rezerwacje pamięci na kolumny.
P-138378
carlosmay
» 2015-10-10 23:15:43
C/C++
Klasa( const Klasa & kl )
{
    if( this != & kl )
    {
        this->x = kl.x;
        int i, j;
        this->macierz = new double *[ kl.wiersze ];
        for( i = 0; i < kl.kolumny; i++ )
        {
            this->macierz[ i ] = new double[ kl.kolumny ];
           
            for( j = 0; j < kl.wiersze; j++ )
            {
                this->macierz[ i ][ j ] = kl.macierz[ i ][ j ];
            }
        }
    }
   
    else
    {
        cout << "Ten sam obiekt" << endl;
    }
}
 
P-138379
ast44
Temat założony przez niniejszego użytkownika
» 2015-10-11 12:37:24
Poprawiłem, ale teraz wyrzuca liczby typu 8.30631e-305000
P-138397
ast44
Temat założony przez niniejszego użytkownika
» 2015-10-11 12:41:00
A przepraszam, zapomniałem w jednym miejscu dać operator kropki.Teraz już działa dobrze.Dzięki za pomoc.
P-138398
« 1 »
  Strona 1 z 1