Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

26.10.2003, 23:44

Klassen bzw. globale Variablen

Kann mir jemand sagen, ob in einer Klasse die Variablen die unter public stehen man auch als globale Variablen sehen kann???

Bsp.:

class fisch
{
private:
int name;

public:
int age;
};

Wäre in diesem Fall die Variable age mit einer globalen Variable vergleichbar??

Könnte mir hinzu noch jemand sagen, wo der Sinn zwischen private und public Variablen liegt???

Vielen Dank im voraus

Homer ;-)

unsigned int

Alter Hase

Beiträge: 512

Wohnort: Bonn

Beruf: Schüler; C#-Programmierer in einer kleinen Firma

  • Private Nachricht senden

2

26.10.2003, 23:47

private variablen können nur von der klasse benutzt werden. publice hingegen von jedem. dies dient der sicherheit
"Tu es. Oder tu es nicht. Es gibt kein Versuchen."
StarWars

www.tron2d.de.vu

Anonymous

unregistriert

3

26.10.2003, 23:55

Wie meinst du ich kann nur auf private Variablen zugreifen wenn ich in einer Klasse bin?

4

27.10.2003, 00:34

Auf Private Variablen können nur die enthaltenen Methoden der Klasse zugreifen. Bei Öffentlichen Variablen kann man sowohl von den Methoden der Klasse als auch von außen zugreifen.

Öffentliche Variablen sind nicht vergleichbar mit Globalen Variablen. Schon alleine die Lebenszeit ist abhängig von der Klasse. Eine Globale Variable wird auch von keinem Konstruktor Initialisiert und hat IMMER eine Lebensdauer=Programmlaufzeit. Die Globale Variable existiert soblad das Programm gestartet wird und wird gelöscht wenn das Programm beendet wird.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

5

27.10.2003, 02:07

Vielen dank DragonMaster,

hast mir echt weitergeholfen. Also wenn ich es richtig verstanden haben, sind private var,methoden usw. sicherer vor zugriffen die nicht erwünscht sind? Gibt es aus diesem Grund die Zugriffsfunktionen über public Funktionen?


Bsp.:

class cat
{
public:
int color;
int getage ();

private:
int age;
};

void main()
{
cout << "Die Katze ist:" <<getage(); << "Jahre alt."
}

Dieses wäre aus meiner Sichtweise eine Zugriffsfunktion, die das Alter ausgibt und nicht direkt auf die private Variable "age" zugreift.
Wäre der Sinn von einer solchen zugriffsfunktion, dass nicht direkt zugegriffen werden kann und sie somit sicherer sind???

6

27.10.2003, 02:37

Ja genau. Nehmen wir an das du noch eine Set Funktion, für das alter, hast. Nehmen wir weiter an das das alter nur zwischen 0 und 100 sein darf (Warum auch immer, ist ja auch egal). Wenn die Variable age public wäre könnte man ihr auch einfach ungültige Werte zuordnen, z.B. 200. Damit wäre das gesamte Objekt ungültig. Wenn die Variable allerdings Privat ist und man nur über die Set Funktion darauf zugriff hat, kann man in der Set Funktion testen ob der gewünschte Wert im gültign Bereich liegt.

Die Zugriffsrechte bilden also einen Schutz vor der Zerstörung der Daten eines Objektes.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

7

27.10.2003, 12:45

@Homer: Kleiner hinweis:
Um auf Klassenelemente zugreifen zu koennen, brauchst du ein Objekt dieser Klasse.
Vielleicht hast du desshalb gedqcht public-Variablen waeren mit glbalen Variablen zu vergelichen!
Ein Gespenst geht um in Europa...

Anonymous

unregistriert

8

27.10.2003, 13:59

Nochmal an den DragonMaster,

du hast geschrieben, das so die Variable sicherer vor Werten höher 100 ist.

Wäre eine Lösung mit einer public nicht genau so gut??

Bsp:

class cat
{
public:
int age;
};

int alter;
cin >> alter;

if (alter < 100)
{
age = alter;
}

Warum würdest du über eine zugriffsfunktion gehen und nicht über so eine Möglichkeit???
mfg homer

Till

Alter Hase

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

9

27.10.2003, 18:15

Zu deinem Beispiel gerade eben:

Der Sinn dieses ganzen Konzepts mit den Klassen und so dient der Objektorientierung, mit inbegriffen der Datenkapselung.
Und stell' dir mal vor, du würdest deine Klasse nur benutzen können, wenn du deinen Hauptcode der Klasse anpasst.
In deinem Beispiel mit der einen Klasse und dem einen Aufruf ist das natürlich egal, aber das Ziel einer guten Klasse ist es, SELBSTSTÄNDIG zu werden, d.h. du bedienst dich nachher nur noch ihrer Methoden. Wenn du später mal gaaanz viele Instanzen hast, die vielleicht wiederrum von anderen Klassen gekapselt werden ( also 'ne richtige Hierarchie ), dann müsstest du ständig den code überall anpassen.
Wenn die Klasse aber selbstständig ist, also ( auch mithilfe anderer Klassen) alles in ihren Methoden und Interaktionen mit anderen Klassen steckt, kannst du viel komfortabler und effizienter programmieren. ( Vielleicht will ja mal jemand anders deine Klasse benutzen und weiß nicht, dass man das Alter "manuell" prüfen muss ).

Ich hoffe, das hilft dir, wenn nicht, frag' mich ruhig...

Werbeanzeige