Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sabloni: Konverzija Niz<T1> u Niz<T2>

[es] :: C/C++ programiranje :: Sabloni: Konverzija Niz<T1> u Niz<T2>

[ Pregleda: 2351 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Sabloni: Konverzija Niz<T1> u Niz<T2>12.12.2005. u 23:19 - pre 224 meseci
Imam sablon koji implementira dinamicki niz (primer sa vezbi na faksu). Sada ja hocu da mogu da uradim ovo:
Code:

Niz<double> s1;
s1[0] = 3.23;
Niz<int> s2(s1);
s2[2] = 4;


Stoga sam napravio konstruktor sa parametrom:

Code:

template <class U>
Niz(const Niz<U>& n) :
        _duzina(n._duzina),
        _obezbedjeno(n._duzina),
        _elementi( n._duzina>0 ? new T[n._duzina] : 0)
{
       for( unsigned i=0; i<_duzina; i++ )
            _elementi[i] = (T) n._elementi[i];
}


I posto su _duzina i _elementi privatni, uveo da je Niz<int> prijatelj svih raspisa sablona Niz. I to sada radi. Medjutim problem je kada su tipovi isti:
Code:

Niz<int> q1;
q1[0] = 3;
Niz<int> q2(q1);
cout << "q1: " << q1 << endl;
cout << "q2: " << q2 << endl;


Tada uopste ne bude pozvan ovaj moj konstruktor, vec nesto sto stvarno predstavi elemente q1 kao elemente q2 ali pri tom izgleda da ne pravi kopiju. Tako da pri destrukciji naletim na problem. Izlaz:
Code:

Konstruktor bez parametara
q1: [1:3]
q2: [1:3]
a.out(21157) malloc: *** error for object 0x500180: double free


Prikazio sam ceo kod u prilogu.

Meni nije jasno gde je uopste nestao poziv konstruktora sa parametrom??? Ok, kada je U == T raspis sablona izgleda nije ispravan, ali na koji nacin on pravi objekat p2, odnosno q2 tako da njegova duzina i elementi budu oni iz p1, odnosno q1... I naravno, kako treba napisati kod da ovo funkcionise?


http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
Prikačeni fajlovi
 
Odgovor na temu

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Sabloni: Konverzija Niz<T1> u Niz<T2>12.12.2005. u 23:29 - pre 224 meseci
Ok, provalio sam da ako dodam i:

Code:

        Niz(const Niz<T>& n) :
                _duzina(n._duzina),
                _obezbedjeno(n._duzina),
                _elementi( n._duzina>0 ? new T[n._duzina] : 0)
        {
        
        cout << "Konstruktor sa parametrom istog tipa" << endl;
                
        for( unsigned i=0; i<_duzina; i++ )
                _elementi[i] = n._elementi[i];
        }                                                                                                              


sve radi, tj. u ovom drugom slucaju biva pozvan ovaj konstruktor. Medjutim ostaje mi nepoznato zasto to nije radilo sa prethodnim konstruktorom i sta je bilo pozivano umesto njega?
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.dyn.optonline.net.



+6 Profil

icon Re: Sabloni: Konverzija Niz<T1> u Niz<T2>13.12.2005. u 01:24 - pre 224 meseci
Nemam sad vremena da gledam kompletnu klasu, ali bih rekao da se poziva konstruktor za kopiranje koji verovatno nisi implementirao pa ga je kompajler automatski generisao.
 
Odgovor na temu

Goran Rakić
Beograd

Član broj: 999
Poruke: 3766

Sajt: blog.goranrakic.com


+125 Profil

icon Re: Sabloni: Konverzija Niz<T1> u Niz<T2>13.12.2005. u 08:52 - pre 224 meseci
U pravu si, prevideo sam da se konstruktor kopije poziva kada se kao parametar konstruktora prosledi objekat istog tipa. To onda znaci da onaj sablonski konstruktor ne moze da se raspise i u konstruktor kopije, vec je potrebno njega eksplicitno definisati. Zasto to?

U cemu je razlika izmedju Niz(Niz<int>& n) raspisano iz sablonskog konstruktora za U=int i konstruktora kopije Niz(Niz<T>& n) u raspisu za T=int? Zar to nisu iste funkcije?

[Ovu poruku je menjao Goran Rakić dana 13.12.2005. u 10:54 GMT+1]
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
 
Odgovor na temu

[es] :: C/C++ programiranje :: Sabloni: Konverzija Niz<T1> u Niz<T2>

[ Pregleda: 2351 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.