Zum Inhalt springen

Methoden aufrufen in C++


Posti

Empfohlene Beiträge

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 von Posti
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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();

    }


Link zu diesem Kommentar
Auf anderen Seiten teilen

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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();

}



Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...