Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++] Funzioni che restituiscono un oggetto

    Buongiorno,
    sto avendo alcuni problemi con un programma utile alle operazioni sulle matrici. Nello specifico ho creato la classe Matrice e le diverse funzioni (prodotto righe per colonne, matrice trasposta etc). Queste funzioni returnano ognuna un oggetto di tipo Matrice, tuttavia non riesco in nessun modo a riutilizzare i nuovi oggetti che le funzioni creano e quindi a fare ulteriori operazioni (per esempio una trasposta di una trasposta). Il problema potrebbe essere nella distruzione inaspettata degli oggetti che vengono creati oppure in errori nell'implementazione del costruttore di copia o dell'overload dell'operatore =. Posto alcune parti di codice.

    codice:
    codice:
    //ClassMatrix.h
    #ifndef CLASSMATRIX_H
    #define CLASSMATRIX_H
    #include <iostream>
    #include <cmath>
    using namespace std;
    class Matrice
    {
    
    
    public:
    //int a;
    float** matrice;
    Matrice(int a);
    ~Matrice();
    Matrice (Matrice& m);
    Matrice operator= (const Matrice n);
    void Stampa(int a);
    
    
    
    
    friend ostream& operator<< (ostream& os, Matrice& m);
    friend istream& operator>> (istream& is, Matrice& m); 
    
    
    };
    
    
    
    
    // ClassMatrix.cpp
    #include "ClassMatrix.h"
    #include <iostream>
    #include <cmath>
    using namespace std;
    
    
    
    
    Matrice::Matrice (int a) // costruttore
    {
    
    
    matrice = new float* [a];
    for (int i=0; i<a; i++)
    {
    matrice[i]= new float [a];
    for (int j=0; j<a; j++)
    matrice [i][j] = 0;
    {
    }
    }
    cout << "Ho costruito una matrice nulla di dimensioni " << a <<" x "<< a << endl;
    };
    
    
    Matrice::~Matrice()
    {
    cout << "Oggetto eliminato" << endl;
    };
    
    
    Matrice::Matrice(Matrice& m) //costruttore di copia
    {
    
    
    matrice=m.matrice;
    
    
    }; 
    
    
    
    
    Matrice Matrice::operator=(const Matrice n)
    {
    matrice=n.matrice;
    return *this;
    };
    
    
    ostream& operator<< (ostream& os, Matrice& m) 
    {
    int a;
    for (int i=0; i<a; i++)
    {
    for (int j=0; j<a; j++)
    {
    cout << "    ";
    os << m.matrice[i][j];
    
    
    }
    
    
    cout << endl;
    }
    return os;
    }
    
    
    istream& operator>> (istream& is, Matrice& m) {
    int a,i,j;
    
    
    cout << "Inserire i vettori riga separando ogni componente con uno SPAZIO: \n";
    
    
    for (i=0; i<a; i++)
    {
    cout << "Vettore riga " << i << " : ";
    for (j=0; j<a; j++)
    {
    is >> m.matrice[i][j];
    }
    }
    return is;
    };
    
    
    
    
    Matrice Trasposta (int a, Matrice m)
    {
    
    
    Matrice n(m);
    for (int i=0; i<a; i++)
    {
    for (int j=0; j<a; j++)
    {
    n.matrice[i][j]=m.matrice[j][i];
    }
    }
    return  n;
    };
    
    
    
    
    
    
    Matrice Prodotto(int a, Matrice m, Matrice n  )
    {
    Matrice p(a);
    for (int I=0;I<a;I++)
    {
    for  (int J=0;J<a;J++)
    {
    for (int h=0; h<a; h++)
    {
    p.matrice[I][J]=p.matrice[I][J] + m.matrice[I][h]*n.matrice[h][J];
    }
    
    
    }
    }
    return p;
    };
    
    
    
    
    int main ()
    { 
    cout << "Operazioni su matrici " << endl;
    int r;
    do
    {
    cout << "Le dimensioni della matrice sono: " << endl;
    cin >> r;
    } while (r<=0); 
    
    
    Matrice m(r);
    //cout << m << endl;
    cin >> m;
    cout << m << endl;
    Matrice n(r);
    cin >> n;
    cout << n << endl;
    Trasposta(r,m);
    Prodotto(r,m,n);
    }
    Il programma così scritto funziona, riesco a inserire le matrici n ed m e fare su di esse le operazioni. Il problema è svolgere operazioni su matrici che sono risultati delle funzioni sia Prodotto che Trasposta.


    Vi ringrazio per l'attenzione.
    LeonardoG

  2. #2
    confesso che "returnano" (invece che un più semplice "ritornano") in quasi quarant'anni di questo mestiere ancora non l'avevo sentita

  3. #3
    Colpa del mio professore che fa strani miscugli tra italiano e inglese

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,378
    Implementa il distruttore, poi gli errori li trovi tutti
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.