Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Implementierungsproblem » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
as_string

Solche Dinge stehen in genug Büchern oder auch im Netz. Lies doch einfach mal irgendwo, wie man einen Vergleichsoperator für eine C++ Klasse überlädt, was es überhaupt soll und wie man was macht. Das macht doch echt überhaupt keinen Sinn, wenn ich denselben Kram hier gerade nochmal erkläre!
Kevn33

Das ist eigentlich von mir. Mit this greift man auf das aktuelle Objekt und mit rop. auf das andere .

Soll ich top und this komplett weglassen oder wie?
as_string

Lass das "this->" einfach komplett weg. Richtig wäre sonst auch "this.", aber das ist unnötig.
Auch "rop->" ist falsch, da dann "rop.", was man allerdings nicht weg lassen kann.

Aber: Du kopierst das doch alles irgendwo her. Da kommt doch nichts von Dir selber. Erklär doch mal in eigenen Worten, was da überhaupt passieren soll. Außerdem hast Du bei uns ja die Aufgabe auch noch nicht gepostet, so weit ich das sehen kann zumindest.
Kevin33

Aha ok . Dann rufe ich das nächste mal die Funktion auf ,hatte ich übrigens in meinen ersten Ansätzen auch.
Wie sieht es genau mit der anderen Methode aus?
Bekomme die Compiler Fehler net weg
as_string

Zitat:
Original von Kevin33
Aber mir wurde das von jemanden erklärt das man keine Funktionen beim operator aufrufen kann.

Das ist auch wieder Blödsinn. Da hast Du sicher wieder etwas falsch verstanden.
code:
1:
2:
3:
4:
5:
ostream& operator<<(ostream& out, const CTeam& rop) {
	out << rop.getName() << " : " << rop.m_winsTotal << " " << rop.m_equalTotal << " " << rop.m_lostTotal
	    << " ( " << rop.getTotalPoints() << " Punkte ) Tore " << rop.m_goalsScoredTotal << ":" << rop.m_goalsReceivedTotal;
	return out;
}


Gruß
Marco
Kevin33

Zum Vergleich der Tabellenplätze implementieren Sie den überladenen Operator <, der true zurückgibt, wenn das Team des linken Operanden besser ist als das Team des rechten, also einen kleineren Tabellenplatz erhält. Er ist wie folgt spezifiziert: &#61623; Es wird true zurückgegeben, wenn der linke Operand mehr Punkte hat als der rechte Operand. &#61623; Bei gleich vielen Punkten entscheidet die Tordifferenz (Gesamtzahl eigener Tore – Gesamtzahl Gegentore). Wenn der linke Operand eine bessere (höhere) Tordifferenz hat als der rechte, wird ebenfalls true zurückgegeben. &#61623; In allen anderen Fällen wird false zurückgegeben

Ich bekomme hier die Fehlermeldungen net weg string:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
bool CTeam::operator< (const CTeam& rop){
if(this->getTotalPoints()>rop->getTotalPoints()){

return true;
}
if(this->getTotalPoints()== rop.getTotalPoints()){

int Team1Points = this->m_goalsScoredTotal - this->m_goalsReceivedTotal;
int Team2Points = rop.m_goalsScoredTotal - rop.m_goalsReceivedTotal;

if(Team1Points>Team2Points){
return true;
}
else{

return false;
}

}



Bekomme folgende Fehlerescription Resource Path Location Type
base operand of '->' has non-pointer type 'const CTeam' CTeam.cpp /CTeam line 70 C/C++ Problem
Description Resource Path Location Type
passing 'const CTeam' as 'this' argument discards qualifiers [-fpermissive] CTeam.cpp /CTeam line 74 C/C++ Problem
Kevin33

Aber mir wurde das von jemanden erklärt das man keine Funktionen beim operator aufrufen kann.

Es wurden ja auch fehler in meinem Ansatz angezeigt .

Aber du meintest ja gleich : Ich will euch verarschen großes Grinsen
as_string

Für die Nachwelt noch ein paar Anmerkungen:
  • Es macht offensichtlich überhaupt keinen Sinn, einen Leerstring (also "") mit in den Stream zu schreiben.
  • Wenn man mehrere String-Literale hintereinander ausgeben will, sollte man die zu einem String zusammenfassen, also: "abc" << "def" schreibt man dann besser als "abcdef".
  • die Rechnung 3*m_winsTotal + m_equalTotal ist gerade das, was die Methode getTotalPoints() ausrechnet. Dann sollte man auch diese Methode verwenden und nicht dieselbe Berechnung nochmal machen. Wenn sich irgendwann die Berechnungsart in Zukunft ändern sollte, muss man das dann nur an einer Stelle anpassen.

Mehr hab ich mir nicht angeschaut. Aber das sollte man schon beachten.

Gruß
Marco
Kevin33

Habe es hinbekommen.

Hier nochmal für die Nachwelt ,falls jemand sich irgendwann mal mit der Aufgabe beschäftigt.
Muss sich dann nicht dumm und dämlich fragen großes Grinsen

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
ostream& operator<<(ostream& out,CTeam const& rop){

		out << rop.m_teamName << ":" << "" << rop.m_winsTotal << rop.m_equalTotal<< rop.m_lostTotal<<" (" << 3*rop.m_winsTotal+1*rop.m_equalTotal<< "Punkte )" << " " <<"Tore"<<rop.m_goalsScoredTotal<<":"<<rop.m_goalsReceivedTotal<<endl;

		return out;
	}



Habe getestet,die Ausgabe kommt richtig aus.
Kevin33

Über meine Dummheit können wir uns ja später streiten großes Grinsen

Etwas besser ?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
ostream& operator<<(ostream& out,CTeam const& rop){

	out << rop.m_teamName << ":" << "" << rop.m_goalsScoredTotal << rop.m_goalsReceivedTotal<< rop.m_equalTotal<< 3*rop.m_goalsScoredTotal+0*rop.m_goalsReceivedTotal+1*rop.m_equalTotal<<"Tore"<<rop.m_goalsScoredTotal<<":"<<rop.m_goalsReceivedTotal<<endl;
		
		return out;
	}



Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen.