Posti Geschrieben 18. Mai 2009 Teilen Geschrieben 18. Mai 2009 (bearbeitet) Hallo, ich soll am Mittwoch mit eine kleine Präsentation halten in der ich die Unterschiede zwischen Java und C++ kurz erkläre. Ich bin noch relativ unerfahren in sachen programmieren und weiss jetzt nicht wie ich eine selbst erstelle Methode in einem externen Hauptprogramm aufrufen soll um sie zu verwenden. Ich möchte eine Methode verwenden die das Volnumen einen Quaders berechnet. Ist ja ziemlich einfach. Also in Java sieht das ganze so aus: Hier die Methode in einer einzelnen Klasse: public class Formen { public double quader (double a, double b,double c) { double quader; quader = (a*b*c); return quader; } } Und hier das Hauptprogramm in der ich die Methode aufrufe: public class Haupt { public static void main (String argv[]) { Formen m1 = new Formen(); //Deklaration double quader; double a = 5; double b = 10; double c = 15; quader =m1.quader(a, b, c); System.out.println ("Volnumen Quader: "+quader+" cm3"); } } So hier das ganze in C++ Methode: class quader { void test (int a, int b, int c) { int ergebnis = a*b*c; } }; Hauptprogramm: #include <iostream> #include "quader.h" using namespace std; int main() { quader Haupt; int a = 10; int b = 10; int c = 10; int ergebnis; std::cout<<"Ergebnis = "<<ergebnis<<endl; cin.get(); } Die Ausgabe sollte hier ja eigentlich lauten: Ergebnis = 1000 Wenn ich die exe. ausführe wird ausgegeben: Ergebnis = 3735609 Wenn ich in der Entwicklungsumgebung compiliere und dann ausführe wird ausgegeben: Ergebnis = 50396196 Woher nimmt er diese Zahlen ? Ich nutzte Dev-C++ als Umgebung. Wäre echt nett wenn ihr mir helfen würdet, Ist bestimmt ein Fehler in der Syntax. MfG Posti Bearbeitet 18. Mai 2009 von Posti Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 18. Mai 2009 Teilen Geschrieben 18. Mai 2009 Ist bestimmt ein Fehler in der Syntax Wenn es ein Syntaxfehler wäre, würde der Compiler das Programm nicht übersetzen können. Du hast da bei der Umsetzung einiges geändert, das man nicht hätte ändern müssen: Die Datentypen von double nach int, den Klassennamen von Haupt nach quader, den Methodennamen von quader nach test, und den Rückggabetyp von double nach void. Und aufgerufen hast du die Methode in C++ auch nicht. Es wird ja nie etwas berechnet, daher gibst du den Wert der uninitialisierten Variablen ergebnis aus, und der ist mehr oder weniger zufällig. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Posti Geschrieben 18. Mai 2009 Autor Teilen Geschrieben 18. Mai 2009 Habs mal nen bischen abgeändert aber funzen tut es noch nicht. Ich weiss ja selber gar nicht wirklich wie man die Methoden in C++ aufruft. Wäre echt nett wenn du mir nen Beispiel geben könntest. Die Methode: class quader { void quader (double a, double b, double c) { double ergebnis = a*b*c; } }; Das Hauptprogramm #include <iostream> #include "quader.h" using namespace std; int main() { quader.Haupt; double a = 10; double b = 10; double c = 10; double ergebnis; std::cout<<"Ergebnis = "<<ergebnis<<endl; cin.get(); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 18. Mai 2009 Teilen Geschrieben 18. Mai 2009 Ich weiss ja selber gar nicht wirklich wie man die Methoden in C++ aufruft.Praktisch genauso wie in Java. Der Unterschied zum Java-Code liegt eigentlich nur in der Signatur der main-Funktion, der leicht anderen Syntax der Zugriffsspezifizierer, der Konsolenausgabe und der Tatsache, dass man Klassenexemplare in C++ nicht mit new anlegen muss. #include <iostream> class Formen { public: double quader (double a, double b,double c) { double quader; quader = (a*b*c); return quader; } }; int main() { Formen m1; //Deklaration double quader; double a = 5; double b = 10; double c = 15; quader = m1.quader(a, b, c); std::cout << "Volnumen Quader: " << quader << " cm3" << std::endl; }[/code] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Posti Geschrieben 19. Mai 2009 Autor Teilen Geschrieben 19. Mai 2009 Dann erstmal für den Quellcode. Aber wo füge ich jetzt den Befehl ein dass das Fenster sich nicht sofort wieder schließt ? soweit ich weiss heisst der Befehl cin.get(); So sieht das ganze jetzt bei mir aus: #include <iostream> #include "quader.h" int main() { Formen m1; //Deklaration double quader; double a = 5; double b = 10; double c = 15; quader = m1.quader(a, b, c); std::cout << "Volnumen Quader: " << quader << " cm3" << std::endl; } class Formen { public: double quader (double a, double b,double c) { double quader; quader = (a*b*c); return quader; } }; Habe schon ziemlich viel probiert wo der cin.get(); Befehl eingefügt werden muss. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 19. Mai 2009 Teilen Geschrieben 19. Mai 2009 Aber wo füge ich jetzt den Befehl ein dass das Fenster sich nicht sofort wieder schließt ? soweit ich weiss heisst der Befehl cin.get();Sinnvoll wäre es wohl nach der Ausgabe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Posti Geschrieben 19. Mai 2009 Autor Teilen Geschrieben 19. Mai 2009 Das klappt nicht. Gibt immer einen Compilierungsfehler. Das wird mir ausgegeben. H:\Refearat\C++\Programme\Methoden\Quader Methode\Haupt.cpp In function `int main()': 15 H:\Refearat\C++\Programme\Methoden\Quader Methode\Haupt.cpp `cin' undeclared (first use this function) (Each undeclared identifier is reported only once for each function it appears in.) Das wäre der Quellcode dazu: #include <iostream> #include "quader.h" int main() { Formen m1; //Deklaration double quader; double a = 5; double b = 10; double c = 15; quader = m1.quader(a, b, c); std::cout << "Volnumen Quader: " << quader << " cm3" << std::endl; cin.get(); } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Hexagon Geschrieben 19. Mai 2009 Teilen Geschrieben 19. Mai 2009 Moin. Das klappt nicht. Gibt immer einen Compilierungsfehler. Das wird mir ausgegeben. Schonmal std::cin versucht? :floet: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Posti Geschrieben 19. Mai 2009 Autor Teilen Geschrieben 19. Mai 2009 Jo danke jetzt gehts. std::cin.get(); war der richtige Befehl. Ehrlich gesagt weiss ich gar nicht was das std jetzt überhaupt bedeutet. Naja da werd ich mal gucken ob ich dazu was finde. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 19. Mai 2009 Teilen Geschrieben 19. Mai 2009 Das gibt den Namensraum an indem sich die Funktion bzw. Klasse befindet. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
FlakT Geschrieben 21. Mai 2009 Teilen Geschrieben 21. Mai 2009 Du kannst auch den ganzen std:: Müll weglassen, implementiere einfach am Anfang (also unter include) folgendes: using namespace std; Bist du denn wenigstens fertig geworden bzw hast alle Syntaxfehler und Compilerwarings ausgeschlossen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Posti Geschrieben 21. Mai 2009 Autor Teilen Geschrieben 21. Mai 2009 Ja klappt jetzt alles. Hab das jetzt verstanden mit dem std Namensraum. Den Befehl schreibe ich jetzt einfach immer an den Anfang dann kann ich den sonst bei den Ausgaben usw. immer weglassen. Danke für eure Hilfe Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 21. Mai 2009 Teilen Geschrieben 21. Mai 2009 JDen Befehl schreibe ich jetzt einfach immer an den Anfang dann kann ich den sonst bei den Ausgaben usw. immer weglassen. Man sollte sich das nicht als festen Bestandteil eines Programms angewöhnen, der ohne Hinterfragung angewendet wird. Namespaces dienen dazu, Bezeichner zu strukturieren und Namenskonflikte zu verhindern. Mit der using-Direktive hebelt man diese Wirkung wieder aus. Das ist nicht immer gewünscht. Ein using namespace std; mag besonders bei kurzen und einfachen Programmen sinnvoll sein, aber das ist nicht immer so. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
FlakT Geschrieben 22. Mai 2009 Teilen Geschrieben 22. Mai 2009 Namespaces dienen dazu, Bezeichner zu strukturieren und Namenskonflikte zu verhindern. Mit der using-Direktive hebelt man diese Wirkung wieder aus. Das ist nicht immer gewünscht. Ein using namespace std; mag besonders bei kurzen und einfachen Programmen sinnvoll sein, aber das ist nicht immer so. Das ist sehr interessant. Aber in C++ soll es doch zur Vereinfachung dienen. Man ist doch generell "faul" als Programmierer. Seh leider nicht den Nachteil bei grösseren Programmen. Kannst du da vielleicht mal Beispiele nennen oder Quellen ansprechen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
TDM Geschrieben 26. Mai 2009 Teilen Geschrieben 26. Mai 2009 Kannst du da vielleicht mal Beispiele nennen oder Quellen ansprechen? C/C++ Forum :: using namespace std Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.