Zum Inhalt springen

Verschachtelung von Prozeduren.


Empfohlene Beiträge

Geschrieben

Hallo,

um mir Arbeit mit Klassen etwas zu ersparen, wollte ich versuchen, Funktionen und Prozeduren zu schachteln, aber ich hatte bisher keinen Erfolg.

Ich habe schon alles probiert:

void X()

void Y()

{...}

{...};

void X()

{

void Y()

{ ... }

...

};

Aber nichts geht.

Gibt es da eine Lösung? Oder ist C++ nicht dazu in der Lage?

Gruß Tapeman

Geschrieben

Hallo,

eine echte Schachtelung

int func1 {

int func2 {

... code ...

return result;

};

... code ...

return result;

};

ist nicht möglich. Aber was spricht dagegen, eine Klasse zu verwenden in der Du die Funktionen als Member-Functions implementierst?

Nic

Geschrieben

Danke,

die Methode ist mir bereits bekannt und auch schon stark im Einsatz, nur geht es mir auch mit um die Gültigkeit, es soll so sein, das nur Prozedur X die Prozedur Y aufrufen kann.

Gruß Tapeman

Geschrieben

Hallo,

Das wird nicht funktionieren (zumindest nicht unter der Vorgabe, dass nur bestimmte Funktionen Y aufrufen dürfen/können). Allerdings sollte sich dies Vorgabe durch eine Klasse oder mehrere Klassen mit privaten Memberfunctions erfüllen lassen.

Nic

Geschrieben

Hallo,

Was jetzt neben bei, member-Funktionen, sind normale Funktionen einer Klasse, oder? :-?

Naja, ich benutzte ja schon die Methode X ruft Y auf, aber ich wollte alles ein wenig strukturierter und ohne Klassen.

Ich bin jetzt aber doch daran, meine Programmfunktionen zu gruppieren und in 2 verschiedene Klassen zu implementieren.

Was mir gleich einfällt, wenn ich eine Klasse mit mehreren Teilfunktionen besitze, aber nur eine Funktion im Programm gebrauche, wird dann auch der Code der anderen Klassen implementiert?

Danke.

Geschrieben
Original geschrieben von Tapeman

Was jetzt neben bei, member-Funktionen, sind normale Funktionen einer Klasse, oder? :-?

ja, das sind die methoden einer klasse

Naja, ich benutzte ja schon die Methode X ruft Y auf, aber ich wollte alles ein wenig strukturierter und ohne Klassen.

Ich bin jetzt aber doch daran, meine Programmfunktionen zu gruppieren und in 2 verschiedene Klassen zu implementieren.

ohne klassen? naja, die oop beruht doch auf klassen, oder hab ich da irgendwas falsch verstanden? willst du prozedural programmieren? :confused:

Was mir gleich einfällt, wenn ich eine Klasse mit mehreren Teilfunktionen besitze, aber nur eine Funktion im Programm gebrauche, wird dann auch der Code der anderen Klassen implementiert?

das verstehe ich jetzt nicht... wenn du nur eine funktion brauchst, dann implementierst du nur diese, wo ist das problem?

Geschrieben

Erst wollte ich nur prozedural programmieren, da aber in C++ keine Möglichkeit besteht Prozeduren zu verschachteln, bin ich nach OOP ausgewichen.

Ich meine, wenn ich eine Klasse mit einer Sammlung von Funktionen hab, und diese wie stdio.h und iostream einbinde aber nur eine Funktion benutze, wird dann nur diese Funktion übersetzt oder auch der Rest der Klasse?

Danke.

Geschrieben

Mal eine blöde Frage:

Gibt es eine Programmiersprache die das Verschachteln von Funktionen erlaubt? Wozu?

@Tapeman:

Die ganze Klasse wird mitgelinkt.

Bei Libraries(z.B. stdio) ist der Fall ein bisschen anders. Da hängt es davon ab ob jede Funktion ein eigenes Modul in der Library ist oder nicht.

Geschrieben

Ja das verschachteln von Prozedure erlaubt zum Beispiel Turbo Pascal mit:

procedure A;

procedure B;

begin

...

end;

begin

B;

end;

Ich wollte bei mir ja alles etwas übersichtlicher haben.

Und es hat mich ja einfach interessiert, weil wie gesagt Pascal das erlaubt.

Wozu ? hm, naja, lt. meinem Beispiel kann dann eben nur Prozedur A die Prozedur B aufrufen. Womöglich aufgrund der Overlaytechnik.

Geschrieben

hmm, also wenn du "nur" willst, dass funktion A - und nur diese funktion A - funktion B aufrufen können soll, dann deklarier doch funktion B als private, dann kann keiner von ausserhalb darauf zugreifen, aber ich glaube, das stand bereits ein paar posts höher.

vielleicht solltest du dich erst mit oop allgemein, also sozusagen der "philosophie" befassen, dann weisst du auch, wie du was machen kannst und vor allem warum ;)

  • 2 Wochen später...
Geschrieben

Also ich find das nicht wirklich überischtlich. Ausserdem is C++ nicht prozedural sondern objektorientiert.

C ist prozedural, aber so eine Schachtelung geht in C auch nicht.

Aber wenn du nur in Func A die Func B aufrufen willst, dann kannst du dir Func B eigentlich gleich sparen, und den Code von B einfach mit in A schreiben, oder nicht?

Geschrieben

Hallo,

Original geschrieben von FinalFantasy

Aber wenn du nur in Func A die Func B aufrufen willst, dann kannst du dir Func B eigentlich gleich sparen, und den Code von B einfach mit in A schreiben, oder nicht?

Wenn identischer Code mehrmals innerhalb der Funktion benötigt wird, bläht das den Code unnötig auf und macht ihn unübersichtlich. Sinnvoller ist es da, diese Code-Stücke in eine eigenen Funktion zu packen.

Nic

Geschrieben

Was mir gestern abend noch eingefallen ist, warum das überhaupt nicht gehen kann:

int funca(arg) {

int funcb(arg) { //<---- Stelle A

....

}

funcb(test); //<---- Stelle B

....

}

Es kann gar nicht gehen, weil an Stelle A die Funktion ja nur definiert würde, keinesfalls aber gleich ausgeführt, also selbst wenn, müsst man die Funktion nochmal, wie z.B. an Stelle B, extra aufrufen.

Wenn das einzige was mir eingefallen ist, wie man es machen könnt, dass man funcb wirklich nur in funca aufrufen kann, ist, dass man sich eine Klasse mit nur diesen zwei Funktionen schreibt, in der dann funca public (oder protected) ist, und funcb private.

Aber was natürlich stimmt: Wenn die funcb in funca öfter benötigt wird, würde ich sie auch in eine externe Funktion packen. Nur dann könnte man sie halt von überall aufrufen.

  • 2 Wochen später...

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...