Überladener Konstruktor

dannyesl

Mitglied
Hallo Leute :)
Ich habe in meinem Studium begonnen c++ zu programmieren ohne jegliche vorkenntnisse und dementsprechend habe ich da noch einige Probleme.

Wir haben als Aufgabe bekommen, eine kleine Artikelverwaltung zu programmieren mit Artikel anlegen (Artikelnummer,Menge,Preis,Bezeichnung), einbuchung, ausbuchung, lagerbestand.
Das habe ich auch alles hinbekommen ohne Probleme.

Die neue Aufgabe ist, ein untermenü zum artikel anlegen zu machen. Einmal "mit lieferung" einmal "ohne Lieferung"...das war auch kein problem.

Nun soll, wenn man "ohne" auswählt, die Menge des Artikels auf 0 gesetzt werden (Standardkonstruktor), wenn man "mit" auswählt soll die Menge automatisch erst einmal auf 10 gesetzt werden (überladener Konstruktor).

Wie muss ich vorgehen?

Bei mir ist das Problem, sobald ich den 2. Konstruktor erstelle, gibt er eine Fehlermeldung aus. Mache ich nur überladener setzt er die Menge auf 10...aber wie kriege ich das Programm dazu das es entscheidet, welchen er nimmt?

Vielen Dank im Voraus.
 
Hilft es vllt. wenn ich das Programm hochlade? Dann kann man direkt reinschauen....

http://ul.to/onmump

error C2374: 'VerwalteAuswahl': Neudefinition; Mehrfachinitialisierung

Ich vermute mal, dass es daran liegt, dass beide Objekte den selben Namen haben....
 
Hilft es vllt. wenn ich das Programm hochlade? Dann kann man direkt reinschauen....

http://ul.to/onmump
Direkt ist anders. Die verlinkte Seite erzählt mir gerade, dass ich 51 Minuten warten oder für den Download zahlen soll… lade den Quelltext doch einfach als Anhang in das Forum hoch. Oder noch besser: binde den relevanten Teil in einem Codeblock ([code=cpp]code[/code]) in den Beitrag ein.

Grüße,
Matthias
 
Auf die Idee bin ich natürlich nicht gekommen :D
Code:
	int Lieferung = 10;
	Artikelverwaltung VerwalteAuswahl;
	Artikelverwaltung VerwalteAuswahl(Lieferung);

Das sind meine erzeugten Objekte....der eine soll für den Standardkonstruktor sein, der andere für den überladenen.

Code:
// Standardkonstruktor
Artikelverwaltung::Artikelverwaltung()
{
	Menge=0;
}

// Überladene Konstruktor
Artikelverwaltung::Artikelverwaltung(int xMenge)
{
	Menge = xMenge;
}

Meine Konstruktoren in der .cpp

*Bemerkung*: Wir programmieren Objektorientiert....falls das jemand interessiert^^
 

Anhänge

Das habe ich mir schon gedacht, dass das falsch ist...unser tutor hat gemeint, dass wir bei der objekterzeugung schon einen parameter übergeben müssen, damit der compiler weiß, dass er den überladenen Konstruktor aufwirdrufen muss....
Im Prinzip, muss ich doch dem Programm irgendwie klar machen, dass wenn im Menü "Ohne Lieferung" ausgewählt wird, dass er den überladenen Konstruktor benutzen soll.....
Nur wie mach ich das?

Hab mal noch die Anleitung hochgeladen...
Eine Teilaufgabe hat sich aber geändert:
Der Wert soll nicht mehr eingegeben werden, sondern die Menge im überladenen Konstr. soll 10 betragen
 

Anhänge

Also du scheinst hier irgendwo einen Denkfehler zu haben.
unser tutor hat gemeint, dass wir bei der objekterzeugung schon einen parameter übergeben müssen, damit der compiler weiß, dass er den überladenen Konstruktor aufwirdrufen muss....
Ja, wann verwendest du denn den Konstruktor? Ich nehme mal an, wenn du ein Objekt erzeugen willst ;)

Du hast 2 Konstruktoren:


Artikelverwaltung::Artikelverwaltung(): Menge(0) {};
// Überladene Konstruktor
Artikelverwaltung::Artikelverwaltung(int xMenge): Menge(xMenge) {};

OK, nun willst du ein Objekt erstellen und willst eine Menge angeben und danach eins ohne:
Artikelverwaltung obj1(200);
Artikelverwaltung obj2;

Verstehe nicht ganz, wo dein Problem lag ;) Du kannst natürlich nicht 2 mal den gleichen Bezeichner wählen. Du musst dir schon klar machen, was das alles bedeutet. Du hast 1 Klasse, das ist die Verwaltung, dann bietest du 2 Möglichkeiten an, eine Instanz zu erstellen, einmal mit Standardkonstruktor und einmal übergibst du gleich die Menge.

Wenn noch Unklarheiten sind -> einfach fragen ;)


Gruß,

badday

PS: Deine get/set-Funktionen habe ich nicht benutzt (stand in der Anleitung)
 
Danke schon mal bis hierher :)
Mein Problem ist:
Ich habe ja das Untermenü
(1) Ohne Lieferung --> 0 soll als Menge gegeben sein
(2) Mit Lieferung --> 10 soll als Menge gegeben sein

Wo gebe ich genau dass ein?
Wenn ich ein Objekt erzeuge, weiß das Programm ja immernoch nicht ,dass es bei (1) 0 geben soll und (2) 10 geben soll....das muss ich doch irgendwo im untermenü mitgeben...oder?
Beides ist ja während dem Programm immernoch möglich...jenachdem was gewählt wird....das ist mein Problem...^^
 
Hi.

Deine Programmstruktur ist ziemlich ungünstig. (wobei ich natürlich auch nicht weiß was alles vorgegeben war bzw. wie die anderen Aufgaben lauteten)

Ich würde erstmal eine Klasse Artikel erstellen.

Außerdem eine Klasse für die Verwaltung von Artikeln.

Weiterhin hat das Auswahl-Menü überhaupt nichts mit der Klasse Artikelverwaltung zu tun und da auch nichts zu suchen. Dadurch hast du jetzt nämlich das Problem das du bereits ein Objekt der Klasse Artikelverwaltung angelegt hast und natürlich nicht nochmal rückwirkend irgendwie einen Konstruktor aufrufen kannst wenn du eine Auswahl getroffen hast.

Insbesondere haben auch die Ein-/Ausgabe-Routinen in den Settern nichts verloren. Setter haben in der Regel einen Parameter und folgende Struktur:
C++:
void setX(int x) {
  this->x = x;
}
Du müßtest (vermutlich) ungefähr folgende Struktur verwenden:
C++:
Artikelverwaltung menu_create() {
  int auswahl; 
  cin >> auswahl;
  switch (auswahl) {
  case 1: // ohne Lieferung
    return Artikelverwaltung(); // Standardkonstruktor
  case 2: // mit Lieferung
    {
       cout << "wieviel Artikel? ";
       int anzahl;
       cin >> anzahl;
       return Artikelverwaltung(anzahl);
     }
  }
}

int main(...) {
  Artikelverwaltung verwaltung; // kreiert allerdings auch ein Objekt

  ...
  switch (auswahl) {
  case 1: // Artikel anlegen
    verwaltung = menu_create();
    ...
    break;
  }
}
Gruß
 
Zurück