Operator
-
Hallo ich habe bei dieser Aufgabe gerade probleme mit der f)
http://www.pic-upload.de/view-31895508/hz.png.html
http://www.pic-upload.de/view-31895510/hz2.png.html
#include "CTitle.h" #include <string> #include<iostream> using namespace std; CTitle::CTitle(int contentSize, int duration, string name, string performer, int bitRate) { //Die Bitrate muss zwischen 32000 und 320000 bit/s liegen. if (bitRate >= 32000 && bitRate <= 320000) { m_contentSize = contentSize; m_duration = duration; m_bitRate = bitRate; } else { //Falls diese Zusicherung verletzt wird, werden die Attribute //m_bitRate, m_duration und m_contentSize auf 0 gesetzt. m_contentSize = 0; m_duration = 0; m_bitRate = 0; } } string CTitle::getName() const { return m_name; } string CTitle::getPerformer() const { return m_performer; } int CTitle::getDuration() const { return m_duration; } double CTitle::getContentsize(){ return m_contentSize; } ostream& operator<< (ostream& lop, CTitle& rop){ lop<< &rop << " " << rop.getName(); lop<< "; " << rop.getPerformer(); lop<< " ; " << rop.getDuration(); lop << " s"; //Ausgabe um s erweitert if (rop.getContentsize() > 9999 * 1024){ // > 9999 KiB lop << rop.getContentsize() / (1024 * 1024) << " MiB"; } else if (rop. getContentsize() > 9999){ // > 9999 B lop << rop.getContentsize() / 1024 << " KiB"; } else{ lop << rop.getContentsize() << " B"; } return lop; }#ifndef CTITLE_H_
#define CTITLE_H_#include <string>
#include <iostream>using namespace std;
/**
* Diese Klasse beschreibt einen MP3-kodierten Titel (Song).
*/
class CTitle
{
private:
/** Name (Titel) des Songs */
string m_name;/** Ausführende(r) (Interpret, Gruppe, Orchester o. ä.) */
string m_performer;/** Die Dauer des Titels in Sekunden. */
int m_duration;/** Die Bitrate in bit/s. */
int m_bitRate;/** Die Größe (Anzahl der Bytes) der Audiodaten. */
double m_contentSize;public:
/**
* Erzeugt ein neues Objekt, dessen Attribute mit den angegebenen
* Werten initialisiert werden.
*
* Falls Name oder Ausführende(r) (performer) leer sind, werden
* die Default-Werte verwendet.
*
* Die Angabe der Bitrate erfolgt in bit/s.
*
* Die Bitrate muss zwischen 32000 und 320000 bit/s liegen.
* Falls diese Zusicherung verletzt wird, werden die Attribute
* m_bitRate, m_duration und m_contentSize auf 0 gesetzt.
*/
CTitle(int contentSize = 0, int duration = 0,
string name = "(Untitled)", string performer = "(Unknown)",
int bitRate = 128000);/**
* Diese Methode liefert den Namen des Titels.
*/
string getName() const;/**
* Diese Methode liefert den Ausführenden (Performer).
*/
string getPerformer() const;/**
* Diese Methode liefert die Dauer (Länge) des Titels in Sekunden.
*/
int getDuration() const;double getContentsize();
};
ostream& operator<< (ostream& lop, CTitle& rop);
#endif /* CTITLE_H_ */
#include "CTitle.h"
#include <string>
#include<iostream>
using namespace std;int main(){
CTitle a(0,2,"titlel","0",23456);
cout<< a <<endl;}[code="cpp"]
Hat jemand tipps für die f)?
-
Lesen, verstehen, implementieren.
-
Nvid schrieb:
Hat jemand tipps für die f)?
Ich hab nen anderen Tip für dich: Schreib womit genau du Probleme hast und stell Fragen dazu.
Einfach nur so "habt ihr Tips" - sollen wir dir jetzt alles aufschreiben wo wir der Meinung sind dass es jemand geben könnte der es nicht weiss? Ernsthaft? Glaubst du wirklich dass es jemand interessiert das zu machen? Ich glaub's nicht.
-
Ich habe erst einmal jetzt ein Operator erstellt im Header:
CTitle operator+( CTitle right);
main 2 Titel erstellt
#include "CTitle.h" #include <string> #include<iostream> using namespace std; int main(){ CTitle a(0,2,"titlel","0",23456); cout<< a <<endl; CTitle b(0,3," BadBoy", "text", 66666);Muss ich rgendwie auch den linken Operand erstellen ?
Wie ?In der Aufgabe steht wenn die Bitrate nicht übereinstimmt ,den linken Operanden ausgeben .
WIe soll ich Bitrate vergleichen ?
So?
If( this.Bitrate != bitrate ????
-
sind das Ansätze genug?
-
Kann mir nur jemand erklären wie ich den Fehler weg bekomme ?
Diese Hilfe kann man ja im Forum erwarten ,obwohl man sonst alles selbst machen muss

Schade das es keine hilfe beim implementieren gibt.
Kennt ihr ein forum ,wo es beim implementieren Hilfe bekommt ?
#include "CTitle.h" #include <string> #include<iostream> using namespace std; CTitle::CTitle(int contentSize, int duration, string name, string performer, int bitRate) { //Die Bitrate muss zwischen 32000 und 320000 bit/s liegen. if (bitRate >= 32000 && bitRate <= 320000) { m_contentSize = contentSize; m_duration = duration; m_bitRate = bitRate; } else { //Falls diese Zusicherung verletzt wird, werden die Attribute //m_bitRate, m_duration und m_contentSize auf 0 gesetzt. m_contentSize = 0; m_duration = 0; m_bitRate = 0; } } string CTitle::getName() const { return m_name; } string CTitle::getPerformer() const { return m_performer; } int CTitle::getDuration() const { return m_duration; } double CTitle::getContentsize(){ return m_contentSize; } ostream& operator<< (ostream& lop, CTitle& rop){ lop<< &rop << " " << rop.getName(); lop<< "; " << rop.getPerformer(); lop<< " ; " << rop.getDuration(); lop << " s"; //Ausgabe um s erweitert if (rop.getContentsize() > 9999 * 1024){ // > 9999 KiB lop << rop.getContentsize() / (1024 * 1024) << " MiB"; } else if (rop. getContentsize() > 9999){ // > 9999 B lop << rop.getContentsize() / 1024 << " KiB"; } else{ lop << rop.getContentsize() << " B"; } return lop; } CTitle& operator+(CTitle& lop, CTitle& rop){ if(lop.m_bitRate != rop.m_bitRate){ cout << lop << endl; } if(lop.m_bitRate == rop.m_bitRate){ cout <<lop.m_name << endl; } if(lop.m_name == rop.m_name){ cout << lop.m_name+rop.m_name << endl; } if(lop.m_name != rop.m_name){ cout << lop.m_performer << ", "<< rop.m_performer; } m_duration = lop.m_duration + rop.duration; m_contentSize = lop.m_contentSize + rop.m_contentSize; }header
#ifndef CTITLE_H_ #define CTITLE_H_ #include <string> #include <iostream> using namespace std; /** * Diese Klasse beschreibt einen MP3-kodierten Titel (Song). */ class CTitle { private: /** Name (Titel) des Songs */ string m_name; /** Ausführende(r) (Interpret, Gruppe, Orchester o. ä.) */ string m_performer; /** Die Dauer des Titels in Sekunden. */ int m_duration; /** Die Bitrate in bit/s. */ int m_bitRate; /** Die Größe (Anzahl der Bytes) der Audiodaten. */ double m_contentSize; public: /** * Erzeugt ein neues Objekt, dessen Attribute mit den angegebenen * Werten initialisiert werden. * * Falls Name oder Ausführende(r) (performer) leer sind, werden * die Default-Werte verwendet. * * Die Angabe der Bitrate erfolgt in bit/s. * * Die Bitrate muss zwischen 32000 und 320000 bit/s liegen. * Falls diese Zusicherung verletzt wird, werden die Attribute * m_bitRate, m_duration und m_contentSize auf 0 gesetzt. */ CTitle(int contentSize = 0, int duration = 0, string name = "(Untitled)", string performer = "(Unknown)", int bitRate = 128000); /** * Diese Methode liefert den Namen des Titels. */ string getName() const; /** * Diese Methode liefert den Ausführenden (Performer). */ string getPerformer() const; /** * Diese Methode liefert die Dauer (Länge) des Titels in Sekunden. */ int getDuration() const; double getContentsize(); friend CTitle& operator+(CTitle& lop, CTitle& rop); friend ostream& operator<< (ostream& lop, CTitle& rop); }; #endif /* CTITLE_H_ */Description Resource Path Location Type
'm_contentSize' was not declared in this scope CTitle.cpp /CTitle line 107 C/C++ ProblemDescription Resource Path Location Type
'm_duration' was not declared in this scope CTitle.cpp /CTitle line 106 C/C++ ProblemDescription Resource Path Location Type
Symbol 'm_contentSize' could not be resolved CTitle.cpp /CTitle line 107 Semantic ErrorDescription Resource Path Location Type
Symbol 'm_duration' could not be resolved CTitle.cpp /CTitle line 106 Semantic Error
-
Beantworte dir mal die Frage, auf welches Objekt sich die beiden Variablen beziehen. Du hast lop und rop... Aber ohne rop/lop?
-
Die beiden Variablen beziehen sich auf die getter Methoden ?
Aber was müsste ich dann jetzt machen ?
-
Nein, deine Variablen beziehen sich auf gar nichts, daher auch der Fehler.
Am einfachsten implementierst du den operator+= zuerst. Danach ist operator+ simpel.
-
m_duration += lop.m_duration + rop.duration;
m_contentSize += lop.m_contentSize + rop.m_contentSize;
-
Nein, natürlich nicht so!
Überleg doch mal, was + so macht.
Insbesondere: soll c = a + b irgendwas an a oder b ändern können? Nein! Daher solltest du in einem operator+ auch nichts an a oder b ändern, d.h. nimme beide Parameter als const& an.
Wohingehen operator+= anders ist: da änderst du das *this-Objekt (die linke Seite) und das Objekt rechts bleich unverändert.
+(links, rechts) kann man somit einfach implementieren als: erzeuge Kopie von links, rechne kopie_von_links+=rechts und gib kopie_von_links zurück.
Siehe zum Beispiel http://www.gotw.ca/gotw/004.htm
-
Einen kleinen Teil habe ich schon ipmlementiert :
const(CTitle operator+(const CTitle& duration,const CTitle&contentSize){
CTitle ret(duration);
ret+= contentSize;return ret;
}Bei += was ist da dieses other ?
Und dieses real und imaginary?
-
Noch tipps ?
-
Ja. Eigeninitiative zeigen.