matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Schulmathe
  Status Primarstufe
  Status Mathe Klassen 5-7
  Status Mathe Klassen 8-10
  Status Oberstufenmathe
    Status Schul-Analysis
    Status Lin. Algebra/Vektor
    Status Stochastik
    Status Abivorbereitung
  Status Mathe-Wettbewerbe
    Status Bundeswettb. Mathe
    Status Deutsche MO
    Status Internationale MO
    Status MO andere Länder
    Status Känguru
  Status Sonstiges

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenSoftwaretechnik und ProgrammierungVerständnisfrage zu KLassen
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Deutsch • Englisch • Französisch • Latein • Spanisch • Russisch • Griechisch
Forum "Softwaretechnik und Programmierung" - Verständnisfrage zu KLassen
Verständnisfrage zu KLassen < Softwaretechnik+Pro < Praktische Inform. < Hochschule < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Verständnisfrage zu KLassen: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 11:15 Do 05.05.2011
Autor: egal

Aufgabe
#include <iostream>
using namespace std;

class kreis
{
private:
double xMP;
double yMP;
double radius;
public:
double gibFlaeche (void);
void setzeMP (double xMP, double yMP);
void setzeRadius (double r);

};

double kreis :: gibFlaeche (void)
{
return 3.14159*radius*radius;
}

void kreis :: setzeMP (double xMP, double yMP)
{
this->xMP = xMP;
this->yMP = yMP;
}

void kreis :: setzeRadius (double r)
{

radius=r;
cout<<"Radius wurde gesetzt auf: "<<r<<endl;
}

int main ()

{
double x1=0.0, y1=0.0, r1=1.0, x2=2.0, y2=3.0, r2=2.0;
kreis kreis1;
kreis kreis2;

kreis1.setzeMP(x1,y1);
kreis2.setzeMP (x2, y2);

kreis1.setzeRadius (r1);
kreis2.setzeRadius (r2);

cout<<"Flaeche kreis1: "<<kreis1.gibFlaeche ()<<endl;
cout<<"Flaeche kreis2: "<<kreis2.gibFlaeche ()<<endl;

return 0;
}

Hallo Freunde!

Ich möchte euch ein paar Verständnisfragen stellen um sicher zu gehen, dass ich diese "Klassen-Geschichte" auch einigermaßen verstanden habe.

Die Ausgabe des obigen Codes ist folgende;

Radius wurde gesetzt auf:1
Radius wurde gesetzt auf:2
Flaeche kreis1:3.14...
Flaeche kreis2: 12.5...

so weit, so gut!!

Ich wollte nun ausprobieren, dass die Ausgabe zusätzlich sagt, welche Mittelpunkte gesetzt wurden.

Dies muss ich doch dort ausspucken lassen, wo die Methode "setzeMP" definiert wurde, richtig?
Also so hier:

void kreis :: setzeMP (double xMP, double yMP)
{
this->xMP = xMP;
this->yMP = yMP;
                
cout<<"Mittelpunkt wurde gesetzt auf: "<<....

}

was aber soll ich denn eingeben nach dem letzten "<<"??

zweite Frage wäre das this->xMP=xMP

Das "this" steht doch dafür, dass es keine Missverständnise gibt. Denn das erste xMP ist die Adresse eines Objekts und das zweite xMP ist das Klassenattribut

Nun das ist eine schöne Umschreibung, die ich abgeschrieben habe, nur verstehe ich das nicht, was genau dort passiert!

dritte Frage bezieht sich auf das Hauptprogramm!

ganz unten steht ja:

cout<<"Flaeche kreis1: "<<kreis1.gibFlaeche ()<<endl;
cout<<"Flaeche kreis2: "<<kreis2.gibFlaeche ()<<endl;

wieso sind denn dort zum Schluss Klammern, die vor allem leer sind???


Ziemlich viele Fragen. Hoffe ihr könnt mir helfen, auch wenn die Länge des Textes einige zum Antworten demotiviert :-)

Gruß





        
Bezug
Verständnisfrage zu KLassen: Antwort
Status: (Antwort) fertig Status 
Datum: 13:05 Do 05.05.2011
Autor: Event_Horizon

Hallo!

Das

void kreis :: setzeMP (double xMP, double yMP)
{
this->xMP = xMP;
this->yMP = yMP;
}

ist ein wenig problematisch, weil xMP sowohl eine Membervariable der Klasse selbst bezeichnet, als auch einen Übergabeparameter.

'this' ist ein Zeiger auf die eigene Instanz der Klasse, und damit meint this->xMP die eigene Membervariable.

Übersichtlicher wäre es, die Übergabeparameter anders zunennen, z.B. so:


void kreis :: setzeMP (double xCenter, double yCenter)
{
xMP = xCenter;
yMP = yCenter;
}

Dennoch solltest du den Trick mit dem this kennen, weil sowas an anderer Stelle vorkommen kann.

Dann mußt du natürlich auch schreiben

cout << "Mittelpunkt wurde gesetzt auf: " << this->xMP ....

weil du ja prüfen willst, ob die Variable selbst gesetzt wurde.




Zu dem kreis1.gibFlaeche() :

gibFlaeche() ist eine Methode der Klasse, also sowas wie eine Funktion. Und die werden immer mit Klammern aufgerufen, auch wenn nix drin steht!



Theoretisch kannst du auch direkt auf die Variablen der Klasse zugreifen und ein

cout << kreis1.radius <<endl;

machen, dann müßte radius aber als public, und nicht ans private deklariert sein.
Weil das eine Variable und keine Funktion ist, geht das ohne Klammern.

Aber das ist ein schlechter Stil, auch wenn es schön einfach ist. Du solltest immer mit "Gettern" und "Settern" arbeiten, also Methoden, die die internen Variablen rausgeben oder setzen.

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Softwaretechnik und Programmierung"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.schulmatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]