Einführung in Klassen in C++

ElMadridano

Mitglied
Hallo,
in meinem Studium hab ich das Fach Programmieren. Dort haben wir uns unter anderem mit dem Thema Klassen beschäftigt. Aber die Aufgaben die mir hingeklatscht worden sind, sind zu groß und zu kompliziert, weshalb ich das Thema Klassen nicht richtig verstehen konnte. Was ich brauche sind Einführungs Aufgaben, wo alles erklärt wird. Mir ist völlig klar das ich selber Gas geben muss, aber ohne vernünftige Einführung ist schwer.

Zum Beispiel hab ich diese Aufgabe gefunden, welche ich nicht verstehe: "
Deklarieren und implementieren Sie die Klasse Punkt2DK. Die Klasse Punkt2DK soll folgende Funktionalität erfüllen:
• Erstellung eines Objekts mit Standardwerten (Koordinaten jeweils Null)
• Erstellung eines Objekts mit definierten Werten (Koordinaten x und y)
• Methode zur Ausgabe der Parameter im Format "(x/y)"
• Methoden zum Auslesen und Setzen der Koordinaten x bzw. y (get-/set-Methoden)
• Methode zur Berechnung und Rückgabe des Abstands zum Ursprung Berechnung des Abstands zum Ursprung:
22dxy=+
• Methode zur Berechnung und Rückgabe des Winkels ϕ zur Abszisse (x-Achse)
Berechnung des Winkels zur Abszisse über den Radiant:
arctanyxϕ=*180/π
Verifizieren Sie die korrekte Funktionalität der Klasse, d.h. aller Konstruktoren und Methoden.
"

Und das Programm dazu:

class Punkt2DK
{
private:
double x,y;
public:
Punkt2DK();
Punkt2DK(double P_x, double P_y);
void Ausgabe();
double get_x();
double get_y();
void set_xy(double a, double b);
double Norm();
double Winkel();
};
int main()
{
Punkt2DK P1;
P1.Ausgabe();
P1.get_x();
P1.get_y();
P1.set_xy(5,3);
P1.Ausgabe();
cout << "Norm ist " << P1.Norm() <<endl;
P1.Winkel();
return 0;
}
Punkt2DK:: Punkt2DK()
{
x=0;
y=0;
}
Punkt2DK:: Punkt2DK(double P_x, double P_y)
{
x = P_x;
y = P_y;
}
void Punkt2DK::Ausgabe()
{
cout << "(" << x << "/" << y << ")" <<endl;
}
double Punkt2DK::get_x()
{
return x;
}
double Punkt2DK::get_y()
{
return y;
}
void Punkt2DK::set_xy(double a, double b)
{
x=a;
y=b;
}
double Punkt2DK::Norm()
{
double c,e,d;
c = get_x();
e = get_y();
d = sqrt(c*c+e*e);
return d;
}
double Punkt2DK::Winkel()
{
double PI,Q;
PI = 3.141;
y = get_y();
x = get_x();
Q = (atan (y/x))*(180/PI);
cout << "Der Winkel ist " << Q << "grad" << endl;
}

Was in class Punkt2DK{ steht konnte ich ungefähr verstehen, aber was dann im int main steht, ist für mich unschlüssig und die anderen sind wahrscheinlich Funktionen, wo dann die Aufgaben in der Klasse ausgeführt werden.

Könnt ihr mir diese Aufgabe erklären oder mir Einführungs Aufgaben zeigen oder das einfachste Klassen Programm mit private und Public schreiben und mir erklären, damit ich das verstehe und ich mich dann auch in andere Aufgaben reinarbeiten kann?

Danke
 

ElMadridano

Mitglied
Hallo,
in meinem Studium hab ich das Fach Programmieren. Dort haben wir uns unter anderem mit dem Thema Klassen beschäftigt. Aber die Aufgaben die mir hingeklatscht worden sind, sind zu groß und zu kompliziert, weshalb ich das Thema Klassen nicht richtig verstehen konnte. Was ich brauche sind Einführungs Aufgaben, wo alles erklärt wird. Mir ist völlig klar das ich selber Gas geben muss, aber ohne vernünftige Einführung ist schwer.

Zum Beispiel hab ich diese Aufgabe gefunden, welche ich nicht verstehe: "
Deklarieren und implementieren Sie die Klasse Punkt2DK. Die Klasse Punkt2DK soll folgende Funktionalität erfüllen:
• Erstellung eines Objekts mit Standardwerten (Koordinaten jeweils Null)
• Erstellung eines Objekts mit definierten Werten (Koordinaten x und y)
• Methode zur Ausgabe der Parameter im Format "(x/y)"
• Methoden zum Auslesen und Setzen der Koordinaten x bzw. y (get-/set-Methoden)
• Methode zur Berechnung und Rückgabe des Abstands zum Ursprung Berechnung des Abstands zum Ursprung:
22dxy=+
• Methode zur Berechnung und Rückgabe des Winkels ϕ zur Abszisse (x-Achse)
Berechnung des Winkels zur Abszisse über den Radiant:
arctanyxϕ=*180/π
Verifizieren Sie die korrekte Funktionalität der Klasse, d.h. aller Konstruktoren und Methoden.
"

Und das Programm dazu:

C:
class Punkt2DK
{
private:
double x,y;
public:
Punkt2DK();
Punkt2DK(double P_x, double P_y);
void Ausgabe();
double get_x();
double get_y();
void set_xy(double a, double b);
double Norm();
double Winkel();
};
int main()
{
Punkt2DK P1;
P1.Ausgabe();
P1.get_x();
P1.get_y();
P1.set_xy(5,3);
P1.Ausgabe();
cout << "Norm ist " << P1.Norm() <<endl;
P1.Winkel();
return 0;
}
Punkt2DK:: Punkt2DK()
{
x=0;
y=0;
}
Punkt2DK:: Punkt2DK(double P_x, double P_y)
{
x = P_x;
y = P_y;
}
void Punkt2DK::Ausgabe()
{
cout << "(" << x << "/" << y << ")" <<endl;
}
double Punkt2DK::get_x()
{
return x;
}
double Punkt2DK::get_y()
{
return y;
}
void Punkt2DK::set_xy(double a, double b)
{
x=a;
y=b;
}
double Punkt2DK::Norm()
{
double c,e,d;
c = get_x();
e = get_y();
d = sqrt(c*c+e*e);
return d;
}
double Punkt2DK::Winkel()
{
double PI,Q;
PI = 3.141;
y = get_y();
x = get_x();
Q = (atan (y/x))*(180/PI);
cout << "Der Winkel ist " << Q << "grad" << endl;
}

Was in class Punkt2DK{ steht konnte ich ungefähr verstehen, aber was dann im int main steht, ist für mich unschlüssig und die anderen sind wahrscheinlich Funktionen, wo dann die Aufgaben in der Klasse ausgeführt werden.

Könnt ihr mir diese Aufgabe erklären oder mir Einführungs Aufgaben zeigen oder das einfachste Klassen Programm mit private und Public schreiben und mir erklären, damit ich das verstehe und ich mich dann auch in andere Aufgaben reinarbeiten kann?

Danke
 

VfL_Freak

Top Contributor
Moin,

gewöhne Dir am besten gleich an:
(a) Deine Code vernünftig zu formatieren (er wird lesbar!)
(b) 'sprechende' Variablennamen zu benutzen - sowas wie 'P1' oder '...DK' führt irgendwann garantiert zu Unverständnis!!

C:
class Punkt2DK
{
private:
    double x,y;
public:
    Punkt2DK();
    Punkt2DK(double P_x, double P_y);
    void Ausgabe();
    double get_x();
    double get_y();
    void set_xy(double a, double b);
    double Norm();
    double Winkel();
}; // hier endet Deine Klasse !!
    // alles nachfolgende steht im luftleeren Raum und compiliert so nicht !!
    // ergo: diese Klammer gehört ganz an Ende !!


int main()
{
    Punkt2DK P1;
    P1.Ausgabe();
    P1.get_x();
    P1.get_y();
    P1.set_xy(5,3);
    P1.Ausgabe();
    cout << "Norm ist " << P1.Norm() <<endl;
    P1.Winkel();
    return 0;
}

Punkt2DK::Punkt2DK()
{
    x=0;
    y=0;
}

Punkt2DK:: Punkt2DK( double P_x, double P_y )
{
    x = P_x;
    y = P_y;
}

void Punkt2DK::Ausgabe()
{
    cout << "(" << x << "/" << y << ")" <<endl;
}

double Punkt2DK::get_x()
{
    return x;
}

double Punkt2DK::get_y()
{
    return y;
}

void Punkt2DK::set_xy(double a, double b)
{
    x=a;
    y=b;
}

double Punkt2DK::Norm()
{
    double c,e,d;
    c = get_x();
    e = get_y();
    d = sqrt(c*c+e*e);
    return d;
}

double Punkt2DK::Winkel()
{
    // double PI,Q;
    double PI = 3.141;
    y = get_y();
    x = get_x();
    double Q = (atan (y/x))*(180/PI);
    cout << "Der Winkel ist " << Q << "grad" << endl;
}
// hier die Klammer, die die Klasse abschließt !!


Berechnung des Winkels zur Abszisse über den Radiant: arctanyxϕ=*180/π
Was soll uns dies denn sagen ???

VG Klaus
 

ElMadridano

Mitglied
Was soll uns dies denn sagen ???

VG Klaus
Also in der ganzen Aufgabe geht es um ein Dreieck welches sich in einem Koordinatensystem befindet. "arctanyxϕ=*180/π" Dieser Ausdruck sagt einfach nur wie man den Winkel phi in diesem Dreieck berechnet. In dem Aufgabenblatt war dazu eine richtige Formel sichtbar, hier konnte ich das nicht so wiedergeben. Dieser Text stand noch auf der Aufgabe drauf, hab ich aber grad übersehen : "Schreiben Sie ein Programm, welches die Klasse Punkt2DK enthält. Diese Klasse dient zur Speicherung eines Punktes in der Ebene mittels kartesischer Koordinaten x und y."

Was das Programm kann und machen soll, war mir aber nicht so wichtig. Erstmal wollte ich verstehen, wie so ein Programm aufgebaut ist. Was z.B. im "int main" passiert und in den Funktionen(oder sind das Methoden?) dadrunter mit den Doppelpunkten geschieht.

Deine Tipps werde ich aber beachten, Danke
 

VfL_Freak

Top Contributor
oha, dass sind dann aber die simpelsten Basics ... :oops:
Zudem bist Du hier eigentlich in einem Java-Forum und solltest Dich ggf. (vor allem bei tiefergehenden Fragen) besser an ein C/C++-Forum wenden!

Aber mal zur Einstimmung:
"int main" bezeichnet die Hauptfunktion einen Programms, die standardmäßig immer als erstes aufgerufen wird - durch die sog. Konstruktoren, das wären bei Dir:
C:
Punkt2DK::Punkt2DK();  // Konstruktor der Klasse 'Punkt2DK' OHNE Parameter
Punkt2DK::Punkt2DK( double P_x, double P_y );  // Konstruktor der Klasse 'Punkt2DK' MIT Parameter

Der doppelte Doppelpunkt zeigt quasi die Beziehung zur Klasse an
Beispiel:
C:
double Punkt2DK::get_y()
{
    return y;
}
sagt hier 'get_y' ist eine Methode der Klasse 'Punkt2DK' (welche einen double-Wert zurückgibt)!

Damit Du Dich mit den Grundlagen beschäftigen kannst, hier mal ein paar Links mit Webseiten zur Einführung in die Sprache C++:
https://de.wikibooks.org/wiki/C++-Programmierung/_Einführung_in_C++
http://www.highscore.de/cpp/einfuehrung/
https://ladedu.com/cpp/
https://www.tu-braunschweig.de/Medien-DB/statik/software/einfuehrung_in_cpp.pdf

VG Klaus
 

ElMadridano

Mitglied
Danke für die Links, dort kann ich mich einlesen und anhand den Beispielen, welche auch vorhanden sind, das Thema besser nachvollziehen.
Sowas hab ich gesucht danke, es kann aber sein dass ich mich später hier wieder an dieses Forum wende, wenn ich wieder Probleme mit den Grundlagen hab
 

Neue Themen


Oben