Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Tantari uriasi

lenovo ideapad 1 15alc7

caut cablu lvds(video-invertor) p...

Adobe premiere pro, problema seta...
 Ochelari distanta intermediara

Cum pot sa montez un SSD Sata in ...

Digi + patronul Prima TV cumpara...

Husa si folie pt. Samsung Galaxy ...
 Plita electrica moderna

problema incalzitor de apa Ferroli

Incarcator PB 3.0

Radu Mazare, eliberat conditionat...
 Permis suspendat din cauze medicale

Presiune apa fluctuanta pompa sub...

Revizie auto la Bucuresti

identificare component defect
 

Constructor matrice

- - - - -
  • Please log in to reply
15 replies to this topic

#1
exydos

exydos

    Active Member

  • Grup: Members
  • Posts: 1,992
  • Înscris: 28.07.2014
am functia asta publica la  clasa Matrice a mea : Matrice(const Matrice&),  de ce nu merge asa sa fac?
Matrice::Matrice(const Matrice &m) {
*this = m;
}

Daca fac asa functia merge.
Matrice::Matrice(const Matrice &m) {
    l = m.l;
    c = m.c;
    buf = new int*[l];
    for (int i=0; i < l; i++) {
    buf[i] = new int[c];
    for(int j = 0; j < c; j++)
    buf[i][j] = m.buf[i][j];
  
    }
}

Edited by exydos, 21 October 2019 - 15:31.


#2
Stef_Stef

Stef_Stef

    Senior Member

  • Grup: Senior Members
  • Posts: 2,008
  • Înscris: 17.08.2016
primul e copy constructor, ceea ce apelezi este operatorul "=". Scrie si operatorul "="

#3
exydos

exydos

    Active Member

  • Grup: Members
  • Posts: 1,992
  • Înscris: 28.07.2014
am scris, dar nu am inteles cum functioneaza


Matrice& Matrice::operator=(const Matrice& m)
{
    l = m.l;
    c = m.c;
    buf = new int*[l];
    for(int i = 0; i < l; i ++){
    buf[i] = new int[c];
    for(int j = 0; j < c; j ++)
    buf[i][j] = m.buf[i][j];
    }
    return *this;
}

Adica ca sa ma pot juca cu clasele , sa le adun , sa le inmultesc scad , egalez trebuie sa fac operatorii = , + , * , -.
Dar parca in cazu asta puteai in C cand aveai liste sa faci una noua si sa copiezi informatia deodata gen :
typedef struct cel{
int info;
struct cel *urm;
}TCel, *TLista;
si daca o foloseai intr-o functie puteai scrie TLista aux = prima;

#4
Stef_Stef

Stef_Stef

    Senior Member

  • Grup: Senior Members
  • Posts: 2,008
  • Înscris: 17.08.2016
TLista e pointer care lista, si atunci ai o atribuire simpla de adrese.

#5
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,426
  • Înscris: 06.01.2007
operator= si constructorul de copiere fac in esenta acelasi lucru, ar trebui sa aiba aceiasi implementare.
Doar ca constructorul de copiere e folosit in initializarea unei variabile(noi), asta include si transferul parametrilor pe stiva prin copiere.
Operatorul = e apelat in cazul in care faci asignare.

#6
exydos

exydos

    Active Member

  • Grup: Members
  • Posts: 1,992
  • Înscris: 28.07.2014

 maccip, on 21 octombrie 2019 - 15:56, said:

operator= si constructorul de copiere fac in esenta acelasi lucru, ar trebui sa aiba aceiasi implementare.
Doar ca constructorul de copiere e folosit in initializarea unei variabile(noi), asta include si transferul parametrilor pe stiva prin copiere.
Operatorul = e apelat in cazul in care faci asignare.
deci cand fac Matrice aux = a1 este initializare variabila , iar Matrice aux2; aux2 = aux este apelat constructor de copiere?

#7
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,426
  • Înscris: 06.01.2007
Matrice aux=a1; //constructorul  de copiere
aux=a2 // operatorul =



#8
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,272
  • Înscris: 24.02.2007
Constructorul initializeaza pentru prima data

operator= atribuie alta valoare cand deja era initializat.

Edited by dani.user, 21 October 2019 - 17:54.


#9
exydos

exydos

    Active Member

  • Grup: Members
  • Posts: 1,992
  • Înscris: 28.07.2014
Mersi , mai am o problema. , primesc asa warning in CLion: warning C4717: 'operator>>': recursive on all control paths, function will cause runtime stack overflow.
Am declarat functia friend istream& operator>>(istream&,const Fractie&); in public la clasa Fractie , o implementez asa :
ostream& operator<<(ostream& out,const Fractie& f) {
    out<<f.a;
    return out;
}
am incercat solutiile de pe net si tot nu merge.

#10
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,272
  • Înscris: 24.02.2007
Cine/ce ii a?

#11
exydos

exydos

    Active Member

  • Grup: Members
  • Posts: 1,992
  • Înscris: 28.07.2014

 dani.user, on 21 octombrie 2019 - 19:49, said:

Cine/ce ii a?
class Fractie{
int a, int b;}

// a e numarator si b numitor.

#12
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,272
  • Înscris: 24.02.2007
Ai dat paste la operator<<, arata-ne operator>> mentionat in eroare.

#13
parabellum

parabellum

    Senior Member

  • Grup: Senior Members
  • Posts: 2,457
  • Înscris: 06.01.2010
buf = new int*[l];

Ai grija cand faci asa ceva in operatorul =, pentru ca s-ar putea sa te trezesti cu niste memory leak-uri de toata frumusetea.
Ce se intampla daca buf deja a fost alocat?

#14
exydos

exydos

    Active Member

  • Grup: Members
  • Posts: 1,992
  • Înscris: 28.07.2014

 parabellum, on 21 octombrie 2019 - 22:33, said:

buf = new int*[l];

Ai grija cand faci asa ceva in operatorul =, pentru ca s-ar putea sa te trezesti cu niste memory leak-uri de toata frumusetea.
Ce se intampla daca buf deja a fost alocat?
verific sa  nu fie alocat , si fac programul meu sa mearga in cazu in care merge alocarea

 dani.user, on 21 octombrie 2019 - 19:53, said:

Ai dat paste la operator<<, arata-ne operator>> mentionat in eroare.
adevarat , scuze . Poftim , aceeasi ideie de implimentare
istream& operator>>(istream& stream,const complex& c) {
    stream >> c.re >> c.im;
    return stream;
}

#15
maccip

maccip

    46 ani

  • Grup: Senior Members
  • Posts: 33,426
  • Înscris: 06.01.2007
Eu nu vad nicio recursivitate in codul asta.
Cred ca-i de la niste conversii implicite implementate in clasa complex.

#16
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,272
  • Înscris: 24.02.2007
Initial era vorba de Fractie, acum e cod ce implica complex&. Care-i codul complet care da eroare?

Anunturi

Bun venit pe Forumul Softpedia!

1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate