Hallo,
hopplahopp schrieb:
> Helfer schrieb:
>> Ein Konstruktor/Destruktor wird folgendermaßen deklariert:
>
> Ach so - der Kon- und Destruktur müssen dann den gleichen Namen haben
> wie die Klasse? Aber es gibt doch in C auch den Befehl class für die
> Klassenbildung.
Nein, den gibt es in C eben nicht. Genau genommen, gibt es auch in
Python und C++ keinen "Befehl", der "class" heißt. Schon deswegen, weil
das in C++ und Python ein Schlüsselwort ist, das in Python und C++ die
Deklaration einer Klasse einleitet. Darauf folgt, in Python wie in C++,
dann der Name der Klasse, die Eltern, von denen diese Klasse erbt, und
hierauf folgt dann die Definition der Klasse.
Wie dann der Konstruktor und der Destruktor einer Klasse heißen, bleibt
dem Entwickler der jeweiligen Sprache vorbehalten. Der BDFL hat für sein
Python entschieden, daß die Konstruktoren "__init__()" und Destruktoren
"__del__()" heißen sollen, Bjarne Stroustrup hat sich für C++ dagegen
dazu entschieden daß Konstruktoren und Destrukroten den Namen der Klasse
haben sollen, und den Destruktoren zusätzlich eine Tilde ("~")
vorangestellt wird.
Python:
1 | class MingKlass():
|
2 | def __init__(self):
|
3 | self.i = 5
|
C++:
1 | class MingKlass {
|
2 | public:
|
3 | int i;
|
4 | MingKlass(void) {
|
5 | this->i = 5;
|
6 | }
|
7 | };
|
In beiden Fällen wird eine Klasse "MingKlass" deklariert, und in deren
Konstruktor der Variablen "i" der Wert "5" zugewiesen. "Deklarieren"
heißt hier: Du sagst dem Compiler/Interpreter, daß Du einen Datentyp mit
dem Namen "MingKlass" benutzen willst, der so aussieht und sich so
benimmt, wie dann im Folgenden beschrieben.
Aber bereits in diesem einfachen Beispiel siehst Du zwei Unterschiede:
in Python wird dem Konstruktor als erster Parameter die Instanz der
Klasse übergeben (das muß übrigens nicht "self" sein, ist aber gute
Praxis [1]), während in C++ nichts (void) übergeben wird, aber auf
einmal magisch die Variable "this" auftaucht, die ein Zeiger auf die
Instanz der Klasse ist.
Der zweite gravierende Unterschied ist: dank Autovivikation mußt Du in
Python Deine Variable "i" nicht deklarieren, die wird einfach erzeugt
sobald Du schreibend darauf zugreifst. In C++ hingegen mußt Du Deinem
Compiler nicht nur bekanntmachen, daß Du eine Variable "i" benutzen
willst, sondern im obendrein noch sagen, daß diese Variable vom Datentyp
"int" sein soll. Und während Du in Python Deiner Membervariablen "i"
später problemlos den Wert "fünf" zuweisen kannst (PEP263 beachten!)
wird C++ sich dem Versuch vehement widersetzen, einer "int"-Variablen
etwas zuzuweisen, dessen Datentyp nicht "int" ist.
Du siehst: obwohl beide Programmiersprachen (und viele andere) dieselben
Schlüsselworte haben und diese sogar grob dasselbe tun, handelt es sich
dennoch um zwei völlig verschiedene Programmiersprachen.
In C gibt es keine Klassen, und auch das Schlüsselwort "class" existiert
nicht in C. C ist nämlich wieder eine andere Programmiersprache als C++,
auch wenn C++ eine Weiterentwicklung und Erweiterung von C ist -- und
zwar um genau die objektorientierten Konzepte, für die man Klassen
braucht.
HTH,
Karl
[1] Das funktioniert genauso wie der Code oben:
1 | class MingKlass():
|
2 | def __init__(klausdieter):
|
3 | klausdieter.i = 5
|