unterschied von klassen und funktionen in c++

...komplette Frage anzeigen

4 Antworten

Vielleicht solltest du nochmal ganz von vorne bei der OOP beginnen.

http://openbook.galileocomputing.de/oop/

Lies' dir das Buch durch … :-) Weiters sollte man schon ein wenig die Historie von Programmiersprachen, Sprachkonzepten usw. kennen und verstehen.

Ich beginne mal mit der Sprache C. In C-Programmen gibt es zunächst Variablen und Funktionen, die irgendwie an das Programm gebunden sind. Außerdem kommt der C-Compiler mit sogenanntem „Libraries“, in denen Funktionen bzw. Funktionalitäten „thematisch“ geordnet sind. In einem C- wie in einem C++-Programm muß man die ja irgendwie vom Compiler per Include- bzw. Import-Anweisung mit angeben, damit der Compiler das Programm erstellen kann … :-)

C ist eine sogenannte imperative Programmiersprache.

Bei C++ kommt - da es eine objekt-orienterte Programmiersprache ist – ein anderes Konzept zum Tragen. Zunächst gilt „alles“ ist ein Objekt. Objekte haben Eigenschaften (Variable) und Zustände (Funktionen). Hierbei wurde das aus der Sprache C stammende Konzept der „struct“ einerseits adaptiert und zu einer Klasse erweitert und andererseits wurden diese Daten einer „Klasse“ gekapselt, so dass man nicht mehr mit jeder Funktion die Eigenschaften der Klasse erfragen kann. Eine Klasse ist eine Objektbeschreibung, die aus Variablen (veränderbaren und unveränderbaren) und Eigenschaften (Funktionen, die die Variablen abfragen und verändern aber auch weiteren Funktionen) besteht. D.h. Klasse ist ein Oberbegriff zur Funktion … :-)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von wolfgang1956
11.10.2011, 09:33

Sieh' dir mal den folgenden Podcast an! Hier wird – ebenfalls auf der Grundlage von C – die OOP-Sprache Ojective-C verwendet.

http://www.x02100.de/

Ehrlich gesagt, komme ich immer mehr zu der Überzeugung, dass Stroustrup mit seinen Bemühungen um OOP über die eigenen Beine gestolpert ist … Insbesondere ist die ganze Zeiger-Arithmetik ein totaler Rohrkrepierer. Java hat sich dieser Probleme angenommen und C so weiterentwickelt, dass dieser Zeiger-Unsinn gar nicht erst relevant wird.

Zeiger, Zeiger auf Zeiger, Zeiger auf Zeiger auf Zeiger … Was für ein unübersichtliches Konzept. Dass dann beim Programmieren was übersehen oder vergessen wird ist klar … :-)

0

Du hast irgendwie ein komplett grundlegend falsches Verständnis von Objektorientierung: Klassen und Funktionen sind gar nicht so richtig miteinander vergleichbar, du fragst ja auch nicht: "Was ist der Unterschied zwischen einem Reifen und einem Auto?"

Die Funktion kann zu einer Klasse gehören, muss sie aber nicht. Eine Klasse ist im wesentlichen (ganz grob gesagt) ein abstrakter Datentyp, d.h. er kapselt bestimmte Daten (die Membervariablen) und den entsprechenden Zugriff darauf (die Memberfunktionen) ab. Vielleicht hilft dir das noch weiter: http://de.wikipedia.org/wiki/Klasse_(Programmierung)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von idaser444
10.10.2011, 20:44

..., was bedeutet, dass ???

schuldigung aber kapier ich irgendwie nicht. was sind membervariablen oder was bedeutet er kapselt bestimmte Daten (die Membervariablen) und den entsprechenden Zugriff darauf (die Memberfunktionen) ab ???^^^dumme frage ich weis :D

0

Klassen kapseln Daten und Funktionen die mit diesen Daten arbeiten. Nicht mehr und nicht weniger.

Alternativ müsste man die ganzen Daten global sichtbar und somit für sämtliche (ebenfalls globalen) Funktionen zugreifbar haben. Will man aber nicht, weil man sonst mehr Mist bauen kann und es nicht so schön strukturiert hat.

Antwort bewerten Vielen Dank für Deine Bewertung

Das hast du vollkommen Recht: Man kann mit Klassen im Prinzip auch nicht mehr erreichen als mit einem Programm, das nur auf einer Ansammlung Funktionen aufgebaut ist. Damit wirst du bei einfachen Programmen auch kaum Probleme bekommen.

Wenn Software aber immer komplizierter wird, muss man sich einfach mehr Gedanken machen, wie man das Ganze aufbaut, damit das nicht im totalen Chaos endet ;) Objektorientierte Programmierung ist aus verschiedenen Gründen heute quasi der Standard für viele Anwendungen.

Klassen machen das System, zumindest wenn sie gut entworfen sind, oft viel übersichtlicher und auch für andere Programmierer verständlicher. Wie gesagt, man muss es richtig machen und sinnvoll einsetzen und das ist nicht einfach.

Was man aber auch wieder mal sagen muss: In C++ ist der objektorientierte Teil auch ziemlich kompliziert und teilweise recht hässlich. In anderen Sprachen ist das schon etwas eleganter ;)

So richtig versteht man das alles aber erst, wenn man sich längere Zeit damit beschäftigt. Ist nicht ganz einfach, das von Grund auf zu lernen, das hat viel mit Erfahrung zu tun. Ich weiß auch gar nicht, ob das so gut ist, wenn man das als totaler Anfänger lernt.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von idaser444
10.10.2011, 21:37

denkst du man könnte total durcheinanderkommen oder was? aber so wie ich das verstehe muss ich ein grösseres, schwereres programm machen das nur mit funktionen geschrieben wurde und dann versuchen die ganzen probleme,vaiablen und funktionen in klassen packen und mir alles wieder mit staunen angucken, wie leicht es plötzlich geworden ist.

natürlich gehts auch leichter (?)

0

Was möchtest Du wissen?