Operatoren überladen und dessen Rückgabe???



  • Hallo,

    befass mich seit 2 Wochen mit C++ und schreib an einem Programm welches Matrizenoparationen realisieren soll. Habe dazu ne Klasse Cmatrix geschrieben, welches ein dynamisches Array erzeugt und über Mehtoden und bla diese mit Werten füllen soll, funktioniert auch soweit. Allerdings komme ich mit dem Überladen der operatoren nicht wirklich zurecht und hoffe da auf die Hilfe von kompetenten C++-Programmer.

    Cmatrix& Cmatrix::operator =(Cmatrix& x) 
    {
    	int i,j,m,n;
    	m=x.getdimzz();
    	n=x.getdimsz();
    	for (i=1;i<=m;i++)
    		for (j=1;j<=n;j++)
    			set(i,j,x.get(i,j));
    	return *this;
    };
    
    Cmatrix& Cmatrix::operator*(Cmatrix& x)
    {
    
    	int n,m;
    	double sum;
    	m=getdimzz();
    	n=getdimsz();
    	Cmatrix result;
    	result.matrix = new double* [m];
    	for (i = 0; i < getdimzz(); i++)
    		result.matrix[i] = new double[n];
    	for (i=0; i<getdimzz(); i++)
            for (int j=0; j<x.getdimsz(); j++)
            {	
    
    			sum=0;
                for (int k=0; k<getdimsz(); k++)
    			{
                    sum += get(i,k)*x.get(k,j);
    			}
    			result.set(i,j,sum);
    
            }
    	return *this;
    
    };
    

    Ich erzeuge in meiner main.cpp zwei Instanzen(zb. amatrix und bmatrix) der Klasse Cmatrix, fülle diese mit Werten. und wenn ich dann aber

    Cmatrix result;
    result=amatrix*bmatrix;

    stürzt die ganze sache ab, beim kompilieren folgt keine Fehlermeldung...er scheint bei der rückgabe des objektes mit dem operator* irgendwie nix zurückzugeben, bzw die werte nich inne haben...hoffe ich habs nicht zu dumm erklärt...

    vielen dank im voraus für fachkompetente hilfe...

    mfg forderdale



  • Der operator* sollte vielleicht nicht *this zurückgeben, sondern result (und das auch als Kopie - Referenzen sind zwar reizvoll, aber nicht immer sinnvoll).

    Ansonsten solltest du im operator= auch dafür sorgen, daß das zugewiesene Objekt genug Speicher reserviert hat für m*n Werte (in operator* hast du Speicher reserviert, in op= hoffst du anscheinend darauf, daß der vorhandene Speicher ausreicht).

    PS: Und etwas mathematisches: Bei der Matrizen-Multiplikation wird aus einer K*M-Matrix und einer M*N-Matrik eine K*N-Matrix gebildet - du berücksichtigst die Größe des zweiten Faktors überhaupt nicht.



  • In dem Buch http://www.ubreymann.de/stlb.pdf steht im Kapitel 9 eine Menge zu diesem Thema. Das Buch ist schon etwas älter, aber kostenlos downloadbar.


Anmelden zum Antworten