• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

C++ Krach mit Zeigerfeld

Status
Für weitere Antworten geschlossen.
Mitglied seit
01.08.2000
Beiträge
1.782
Reaktionen
0
Ort
Hamburg
Ich steh grad irgendwie aufm Schlauch. Meine operator+=-Funktion hat n groben Wurm in sich, nur wie beheb ich den, wenn ich die Prototypen nich ändern will? (Dass die operator---Funktion noch fehlt, weiß ich. Das geht dann ja ganz schnell).
Vielen Dank im Voraus!

Code:
#include <iostream>
using namespace std;
const int N = 4;

class Produkt {
private:
		char *artikel;
		float preis;
public:
		Produkt(char * a= "default", float p=0.0f);
		~Produkt();
		char * lies_artikel() { return artikel; }
		float lies_preis(){	return preis; }
		friend ostream& operator<< (ostream&, Produkt&);
};
//----------------------------------------------------------------------------------------------------------------------
class Einkaufswagen {
private:
	Produkt *pProdukte[N];
	int anzahl_Produkte;
	float gesamt_preis;
public:
	Einkaufswagen();
	~Einkaufswagen();
	void operator+=(Produkt& prod);
	void operator--(int);
	friend ostream& operator<< (ostream&, Einkaufswagen&);
};
//----------------------------------------------------------------------------------------------------------------------

Produkt::Produkt(char * a, float p)  : preis(p){
	artikel = new char [strlen(a)+1];
	strcpy (artikel, a);
}

Produkt::~Produkt() {
	delete [] artikel;
}

ostream& operator << (ostream &os, Produkt& p) {
	os << "Produkt : " << p.artikel << ", Preis : " << p.preis<< endl;
	return os;
}
//----------------------------------------------------------------------------------------------------------------------

Einkaufswagen::Einkaufswagen() {
	anzahl_Produkte =0;
	gesamt_preis = 0.0f;
}

void Einkaufswagen::operator +=(Produkt& prod) {
	if (anzahl_Produkte <3) {
		this->pProdukte[anzahl_Produkte] = & prod;
		this->anzahl_Produkte++;
		this->gesamt_preis+= prod.lies_preis();
	}	

}


ostream& operator << (ostream &os, Einkaufswagen& e) {
	for(int i=0; i<e.anzahl_Produkte;i++)
		os << "Produkt : " << e.pProdukte[i]->lies_artikel() << ", Preis : " << e.pProdukte[i]->lies_preis()<< endl;
	os << "Gesamtanzahl Produkte : " << e.anzahl_Produkte << ", Gesamtsumme : " << e.gesamt_preis << endl;
	return os;
}
//----------------------------------------------------------------------------------------------------------------------

void main() {

	Produkt pr1("Hemd", 15.00);
	Produkt pr2("Hose", 25.00);
	Produkt pr3("Socken",5.00);
	cout << pr3;
	Einkaufswagen ekw;

	ekw += pr1;
//	ekw += pr2;
//	ekw += pr3;
//	 cout << ekw;

}
 
Mitglied seit
01.08.2000
Beiträge
1.782
Reaktionen
0
Ort
Hamburg
Ach Gott wie ich die { } hinter dem Einkaufswagen-Destruktor vergessen habe... :[

Falls wen das komplette Programm interessiert:

Code:
#include <iostream>
using namespace std;
const int N = 4;

class Produkt {
private:
		char *artikel;
		float preis;
public:
		Produkt(char * a= "default", float p=0.0f);
		~Produkt();
		char * lies_artikel() { return artikel; }
		float lies_preis(){	return preis; }
		friend ostream& operator<< (ostream&, Produkt&);
};
//----------------------------------------------------------------------------------------------------------------------
class Einkaufswagen {
private:
	Produkt *pProdukte[N];
	int anzahl_Produkte;
	float gesamt_preis;
public:
	Einkaufswagen();
	~Einkaufswagen() {} 
	void operator+=(Produkt& prod);
	void operator--(int);
	friend ostream& operator<< (ostream&, Einkaufswagen&);
};
//----------------------------------------------------------------------------------------------------------------------

Produkt::Produkt(char * a, float p)  : preis(p){
	artikel = new char [strlen(a)+1];
	strcpy (artikel, a);
}

Produkt::~Produkt() {
	delete [] artikel;
}

ostream& operator << (ostream &os, Produkt& p) {
	os << "Produkt : " << p.artikel << ", Preis : " << p.preis<< endl;
	return os;
}
//----------------------------------------------------------------------------------------------------------------------

Einkaufswagen::Einkaufswagen() {
	anzahl_Produkte =0;
	gesamt_preis = 0.0f;
}

void Einkaufswagen::operator +=(Produkt& prod) {
	if (anzahl_Produkte <3) {
		this->pProdukte[anzahl_Produkte] = & prod;
		this->anzahl_Produkte++;
		this->gesamt_preis+= prod.lies_preis();
	}	

}
void Einkaufswagen::operator --(int) {
	if (anzahl_Produkte >0) {
		this->gesamt_preis-= pProdukte[anzahl_Produkte-1]->lies_preis();
		this->pProdukte[anzahl_Produkte-1] = NULL;
		this->anzahl_Produkte--;
		
	}	

}

ostream& operator << (ostream &os, Einkaufswagen& e) {
	for(int i=0; i<e.anzahl_Produkte;i++)
		os << "Produkt : " << e.pProdukte[i]->lies_artikel() << ", Preis : " << e.pProdukte[i]->lies_preis()<< endl;
	os << "Gesamtanzahl Produkte : " << e.anzahl_Produkte << ", Gesamtsumme : " << e.gesamt_preis << endl;
	return os;
}
//----------------------------------------------------------------------------------------------------------------------

void main() {

	Produkt pr1("Hemd", 15.00);
	Produkt pr2("Hose", 25.00);
	Produkt pr3("Socken",5.00);
	cout << pr3;
	cout << "---------------"<< endl;
	Einkaufswagen ekw;

	ekw += pr1;
	ekw += pr2;
	ekw += pr3;
	 cout << ekw;
	 cout << "-----------------------"<<endl;
	 ekw--;
	 cout<< ekw;

}

Kann zu :-/
 

killerchicken_inaktiv

Guest
ok, dann mach ich mal dicht. Denk beim nächsten Mal bitte dran graphische Smileys zu deaktivieren ;)
 
Status
Für weitere Antworten geschlossen.
Oben