hund555 Geschrieben 24. Februar 2005 Geschrieben 24. Februar 2005 Hallo, ich fange erst mit Klassen zu arbeiten und weiß nicht ob das programm so weit richtig ist. ich hab ein programm berechnung geschrieben, und will bei void summe die summe der eingegeben zahlen ausrechnen. wie kann ich jetzt bei meinem Programm im main die Summe ausgeben? #include<iostream.h> #include<stdlib.h> class berechnung { public: berechnung(int zahlen[20], int i=0) { cin >> zahlen[i]; while(zahlen[i]!=0) { i++; cin >> zahlen[i]; }; pri = i; przahlen[20] = zahlen[20]; } void summe() { int sum=0; for (int j=0; j<pri; j++) { sum=sum+przahlen[j]; } cout << sum << endl; } private: int pri; int przahlen[]; }; void main(void) { cout << endl; system("pause"); } [/PHP] Zitieren
carstenj Geschrieben 24. Februar 2005 Geschrieben 24. Februar 2005 Hi, nein, du benutzt deine Klasse wie eine Funktion, und das ist nicht Sinn und Zweck der Geschichte. Eine Einführung in die Objektorientierte Programmierung würde jetzt mit Sicherheit zu weit führen, aber du solltest dir nochmal deine Unterlagen ansehen bzw. ein Tutorial durcharbeiten: http://tutorial.schornboeck.net/oop.htm Zitieren
carstenj Geschrieben 24. Februar 2005 Geschrieben 24. Februar 2005 Etwas objektorientierter wäre dieses Beispiel: #include <iostream> using namespace std; class berechnung { int i, summe; // Standardmäßig sind alle Variablen private public: // Konstruktor, initialisiert i und summe mit 0 berechnung() : i(0), summe(0) {}; ~berechnung() {}; // Destruktor, tut nix... void zaehleBis(int zahl){ for(; i<zahl; i++){ cout << "Zahl" << i << endl; summe = summe + i; } } void gibSumme(){ cout << "Summe:" << summe << endl; } }; int main() { berechnung Berechnung; // Instanz erstellen Berechnung.zaehleBis(20); // Memberfunktionen aufrufen... Berechnung.gibSumme(); } [/php] Zitieren
perdian Geschrieben 24. Februar 2005 Geschrieben 24. Februar 2005 Ich will mich da mal Carsten anschließen. Bevor du hier weiter auf Fehlersuche gehst, bzw. etwas krampfhaft zum Laufen bringen willst solltest du dir ein paar Grundlagen aneignen. Als Stichworte fallen mir bei diesem Beispiel sofort ein: - Was ist eine Prozedur? - Was ist eine Funktion? - Was ist ein Rückgabewert? - Was ist überhaupt eine Klasse? - Was ist der Unterschied zwischen Klasse und Objekt? Denn erst wenn du aufrecht stehen kannst macht es Sinn, das Laufen zu lernen. Zitieren
hund555 Geschrieben 25. Februar 2005 Autor Geschrieben 25. Februar 2005 Ich will mich da mal Carsten anschließen. Bevor du hier weiter auf Fehlersuche gehst, bzw. etwas krampfhaft zum Laufen bringen willst solltest du dir ein paar Grundlagen aneignen. Als Stichworte fallen mir bei diesem Beispiel sofort ein: - Was ist eine Prozedur? - Was ist eine Funktion? - Was ist ein Rückgabewert? - Was ist überhaupt eine Klasse? - Was ist der Unterschied zwischen Klasse und Objekt? Denn erst wenn du aufrecht stehen kannst macht es Sinn, das Laufen zu lernen. ich weiß was funktionen, etc. sind, ich möchte mich jetzt mit klassen auseinander setzten und damit üben! deswegen wollte ich eine Programm mit klassen schreiben. Zitieren
carstenj Geschrieben 25. Februar 2005 Geschrieben 25. Februar 2005 Hi, ich weiß was funktionen, etc. sind, ich möchte mich jetzt mit klassen auseinander setzten und damit üben! deswegen wollte ich eine Programm mit klassen schreiben. dann solltest du aber wissen, dass ein Programm, in der das Wort "Klasse" ("Class") vorkommt, noch lange kein objektorientiertes Programm ist. Du musst das Konzept verstehen, ansonsten kannst du dir den Einsatz von Klassen sparen und weiterhin prozdual programmieren. Zitieren
JohnJagger Geschrieben 25. Februar 2005 Geschrieben 25. Februar 2005 Verdammt, gebt ihm doch dann lieber eine Hilfestellung, anstatt blöde Zitate auszupacken...er hat ein Beispiel gegeben, also könnte man ihm doch daraufhin einen Anhaltspunkt geben, oder nicht ?! Zitieren
carstenj Geschrieben 25. Februar 2005 Geschrieben 25. Februar 2005 Hi, wo ist denn dein Problem? Ich hab doch einen überarbeiteten Code geliefert, wo er auch überhaupt nicht drauf eingegangen ist. Dass sein Code und seine Art mit Klassen zu programmieren nicht richtig ist, war doch auch schon geklärt. Ich sehe auch keine konkreten Fragen, sondern der OP verlangt quasi eine Kompletteinführung in die objektorientierte Programmierung. Deswegen habe ich einen Link zu einem sehr guten Tutorial gepostet. Also was soll man noch tun? Zitieren
JohnJagger Geschrieben 25. Februar 2005 Geschrieben 25. Februar 2005 Ja sorry, carstenj ! Mein Fehler, nehme alles zurück. Wird Zeit für Wochenende. Wünsche ein schönes solches ! Zitieren
perdian Geschrieben 25. Februar 2005 Geschrieben 25. Februar 2005 ich weiß was funktionen, etc. sind, ich möchte mich jetzt mit klassen auseinander setzten und damit üben! deswegen wollte ich eine Programm mit klassen schreiben. Nein ich unterstelle dir hier, dass du eben nicht genau weisst, was beispielsweise der Unterschied zwischen einer Funktion und einer Prozedur ist, oder was eine Methode mit einer Funktion gemeinsam hat. Objektorientierte Programmierung ist ein komplexer Bereich, den man nicht mal eben mit ein paar Übungen und ein paar Kommentaren erklären kann. Deshalb wird dir wirklich nur helfen, dir ein Tutorial zu schnappen (den Link hast du hier ja bekommen), dich damit zu beschäftigen und Schritt für Schritt zu verstehen, was der Knackpunkt bei OOP ist, wo sie genau sich von "klassischer" imperativer Programmierung unterscheidet, bzw. welche Konzepte beide gemeinsam haben. Wenn du dann konkrete Fragen hast, wird dir hier garantiert auch wieder geholfen - nur den Rundumschlag solltest du nicht erwarten. Zitieren
hund555 Geschrieben 25. Februar 2005 Autor Geschrieben 25. Februar 2005 sorry für umstände... meine kontrette frage war auch : wie kann ich jetzt bei meinem Programm im main die Summe ausgeben? und einen Rundumschlag wollte ich nicht haben, und habe auch danach nicht gefragt. mit OOP hab ich mich beschäftigt (c++ in 21 tagen) - wollte wissen bwz. probieren ob man arrays übergeben kann, wie man es in meinem beispiel sieht - sonst nichts, da braucht man auch nicht viel darüber zu diskutieren. Zitieren
Klotzkopp Geschrieben 25. Februar 2005 Geschrieben 25. Februar 2005 Du solltest, wenn du wirklich mit deinem Programm weiterarbeiten willst, zuerst ein paar grundlegende Probleme beheben. Das hat nichts mit OOP zu tun. #include<iostream.h> Das ist veraltet. Nach dem aktuellen Standard heißt der Header iostream, ohne h. #include<stdlib.h> Gleiches gilt hier. Der Header heißt cstdlib. Die Funktionen und Objekte liegen aber im namespace std, d.h. du musst entweder vor alle verwendeten Funktionen std:: schreiben, oder, wie in carstenjs Beispiel: using namespace std; berechnung(int zahlen[20], int i=0) Die Methode ist falsch benannt. Sie berechnet nichts, sondern sie liest ein. Du könntest sie Eingabe nennen. Zudem ist nicht klar, warum du das Array zahlen und den int i als Parameter übergibst. Wenn die Funktion die Werte einlesen soll, brauchst du sie nicht zu übergeben. Wozu übergibst du i? Wozu dient der Defaultwert? while(zahlen!=0) Was ist, wenn schon vorher eine Null in zahlen steht? i++; cin >> zahlen; Was ist, wenn der Benutzer mehr als 20 Zahlen eingibt? }; Das Semikolon kann weg. przahlen[20] = zahlen[20]; zahlen ist ein Array mit 20 Elementen. Daher gehen die gültigen Indizes von 0 bis 19. przahlen hat gar keine Größenangabe. Du greifst also mit einem ungültigen Index auf die Arrays zu. Ich vermute, du willst das ganze Array mit dieser Anweisung kopieren. Das geht aber nicht ohne eine Schleife. void summe() Auch diese Methode ist schlecht benannt. Bei diesem Namen würde ich erwarten, dass die Methode die Summe zurückgibt. Deine Methode gibt nichts zurück, sondern sie berechnet die Summe und gibt sie aus. Die Berechnung selbst ist zumindest korrekt (wenn in przahlen richtige Werte stehen würden). int przahlen[]; Wenn du vermutest, dass du damit ein Array mit flexibler Größenanpassung deklarierst, muss ich dich enttäuschen. Zusammenfassend: Du hast da ein paar echte dicke Klöpse in deinem Code, die mich zweifeln lassen, dass du dich mit den Grundlagen auskennst. Vielleicht solltest du zunächst mal diese Defizite aufarbeiten. Zitieren
Bubble Geschrieben 26. Februar 2005 Geschrieben 26. Februar 2005 mit OOP hab ich mich beschäftigt (c++ in 21 tagen) Nichts für ungut, aber danach würde ich nicht sagen, dass man sich mit OOP beschäftigt hat. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.