Frage von mAin0x, 58

Wie kann man in C eine neue Instanz ueber eine Funktion hinzufuegen?

class Mensch {

static function geburt()

{

return new this(0, otherParams)

}

}

Ich moechte sich von selbstvermehrende Menschen programmieren.

Antwort
von priesterlein, 42

C kennt keine Klassen, also gar nicht.

Wenn du C++ meinst und new verwendest: Benutze nicht "this", das ist kein Typ. Benutze Mensch oder was immer du da vorhast. Sauberer ist es, eine Klasse so zu bezeichnen, dass man sieht, dass es eine Klasse ist, oft wird ein C vor dem Namen benutzt.

Dein Vorhaben wird von fast jedem Anfänger mal gemacht, aber da fehlen anscheinend noch sehr viele Grundlagen in deinem Wissen. Bitte eigne sie dir vorher an. Beispielsweise benutzt du einen ctor, den es gar nicht gibt, zumindest nicht im Beispiel.

Kommentar von TheQ86 ,

oder man gewöhnt sich ab Funktionsnamen mit Großbuchstaben zu schreiben

Kommentar von priesterlein ,

Der Name der Funktion "geburt" enthält keinen Großbuchstaben. Was wolltest du damit ausdrücken?

Kommentar von TheQ86 ,

1. Im Kontext einer Klasse würde es "Methode" heißen, nicht "Funktion"

2. habe ich nur von Konventionen geredet. Programmierstil. Manche stellen einem Klassennamen ein C voran, andere schreiben nur Klassennamen groß und unterscheiden sie so von Funktionen. Das ist nur für die Lesbarkeit.

3. Noch kleiner Tipp: Methoden von Objekten drücken ein Verhalten aus. Korrekterweise sollte die Methode also gebären oder gebaeren heißen, nicht Geburt.

Kommentar von ceevee ,

Manche stellen einem Klassennamen ein C voran

Das nennt sich "ungarische Notation" und das macht man heutzutage nicht mehr, das ist schlechter Stil.

https://de.wikipedia.org/wiki/Ungarische_Notation#Kritik

Antwort
von ceevee, 23

class Human {

  public Human(args:any) {

  }

  public giveBirth(args:any):Human {

   return new Human(args);

  }

}

----

Das ist Pseudocode, sollte aber so funktionieren. 

Kommentar von priesterlein ,

Er benutzte eine statische Funktion. Anscheinend war ihm das wichtig, sonst hätte er es nicht so gemacht. :-)

Kommentar von ceevee ,

Dann halt ...

public static giveBirth(args:any):Human {

   return new Human(args);

  }

Ich denke aber, dass in der gegebenen Aufgabenstellung ("selbstvermehrende Menschen") eine Methode zum gebären nicht statisch sein sollte. In dem einfachen Beispiel, das der Fragesteller hat, mag das zumindest durch den Compiler gehen... da ein neuer Mensch aber Informationen über seine Eltern haben könnte (oder ganz allgemein this verwenden wollen könnte), sollte es eine Instanzmethode sein. Und so sollte man von Anfang an planen. 

Aber "static" ist das Lieblingswort von vielen Programmieranfängern, sowas sieht man öfters. ;)

Keine passende Antwort gefunden?

Fragen Sie die Community