Anzeige:
Ergebnis 1 bis 4 von 4

Thema: C++: Überladen von Operatoren

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418

    C++: Überladen von Operatoren

    Hallo,

    zur Klausurvorbereitung in C++ wollte ich eine Klasse Bruch implementieren, deren Operatoren überladen sind. Hier mal mein bisheriger Code:
    Code:
    #include <iostream>
    
    using namespace std;
    
    class Bruch
    {
    	private:
    		int z;
    		int n;
    	public:
    		Bruch();
    		Bruch(int _z, int _n);
    		Bruch(Bruch& b)
    		{
    			cout << "Hi, I'm the Copy-Constructor!" << endl;
    		}
    
    		friend ostream &operator<<(ostream &_o, Bruch &_b);
    		Bruch operator+(Bruch &_b);
    		Bruch &operator=(Bruch &_b);
    };
    
    Bruch::Bruch()
    {
    	z=0;
    	n=0;
    }
    
    Bruch::Bruch(int _z, int _n)
    {
    	z=_z;
    	n=_n;
    }
    
    Bruch &Bruch::operator=(Bruch &_b)                  //!
    {
    	cout << "Zuweisung!"  << endl;
    
    	return *this;
    }
    
    ostream &operator<<(ostream &_o, Bruch &_b)
    {
    	_o << _b.z << "/" << _b.n;
    
    	return _o;
    }
    
    Bruch Bruch::operator+(Bruch &_b)
    {
    	Bruch tmp(z,n);
    	tmp.z = tmp.z*_b.n + _b.z*tmp.n;
    	tmp.n *= _b.n;
    
    	return tmp;
    }
    
    int main(void)
    {
    	Bruch b1(2,1),b2(4,1);
    	Bruch b3;
    	Bruch b4;
    
    	b4=b1;
    
    	b3 = b1 + b2;                                 //!!
    
    	cout << b1 << " " << b2 << endl;
    
    	cout << b3 << endl;
    }
    Leider bricht der Compiler (g++ (GCC) 4.3.1) mit folgender Meldung ab:
    Code:
    bruch.cpp: In function 'int main()':
    bruch.cpp:(siehe !!): error: no match for 'operator=' in 'b3 = b1.Bruch::operator+(((Bruch&)(& b2)))'
    bruch.cpp:(siehe !): note: candidates are: Bruch& Bruch::operator=(Bruch&)
    . Wo ist denn da das Problem? Kann vom Rückgabewert des +-Operators nicht automatisch eine Referenz gebildet werden?

    Wenn ich den Operatoren statt einer Referenz ein Objekt übergebe (also wenn ich z.B. schreibe Bruch operator+(Bruch _b)), dann funktioniert der Code, allerdings wird dann ja auch bei jedem Aufruf eines Operators der Kopierkonstruktur aufgerufen (weil eine Kopie des übergebenen Objektes angelegt wird). Das wollte ich verhindern. Wie ist das möglich (eigentlich ja mit Referenzen, dann beschwert sich aber der Compiler...)?


    Gruß, Florian

    EDIT: habe gerade mal umgebootet und in Visual Studio 2008 lässt sich der Code ohne Probleme übersetzen... der Code würde sich nämlich auch mit meinen Unterlagen decken.
    Geändert von ContainerDriver (02-07-2008 um 22:29 Uhr)
    Ein gebrechlich Wesen ist der X-Server.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •