Autor Thema: Memberfunktionen in C++ übergeben  (Gelesen 6325 mal)

Farnaby

  • Beiträge: 5
    • Profil anzeigen
Gespeichert
« am: 19. December 2005, 16:20 »
Hi.

Mein Problem ist das folgende.
Ich möchte eine Funktion (nennen wir sie einfach ("integral") einer Numerikbibliothek verwenden:

double integral ( ... , double (*) (double), ... )

Nun möchte ich "integral" aus meiner Klasse heraus eine Memberfunktion meiner Klasse übergeben. Ist das irgendwie möglich?

(Ich kann die Memberfunktion nicht ohne weiteres global machen, da sie Klassenvariablen als Parameter benötigt. Andererseits lässt die Memberfunktion die Klasse konstant.)
mfg,
Farnaby

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 19. December 2005, 18:14 »
hi,

nur wenn du die memberfunktion static machst. Des heißt aber, dass du kein this Zeiger hast.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #2 am: 19. December 2005, 20:04 »
Ja, so ist das schlecht. Das war wohl ne C Bibliothek, oder nicht? ;)
Objektorientiert wäre man schon bei Integral anders rangegangen.
*post*

Farnaby

  • Beiträge: 5
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 19. December 2005, 20:17 »
hmm... son mist!
die bibliothek, die ich benutzen möchte nennt sich "matpack", sollte schon c++ sein, ist aber eben nur freeware.
gibts vielleicht eine nicht zu umständliche und ineffiziente möglichkeit sich eine interface-funktion zu bauen, mit der sowas dann möglich ist?
mfg,
Farnaby

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #4 am: 19. December 2005, 20:34 »
Du könntest die Klasse zB. zum Singleton machen. Also innerhalb der Klasse eine statische getInstance() Funktion, private/protected Kostruktoren, die Objektinstanz statisch innerhalb des Objekts speichern.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #5 am: 20. December 2005, 00:43 »
Oder du schreibst dir schnell ne Routine zur numerischen Integration selber ... oder kann die was besonderes?
*post*

Farnaby

  • Beiträge: 5
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 20. December 2005, 14:09 »
naja, "schnell" selber schreiben ist gut, da ich sowas noch nie geschrieben hab könnte man immerhin auf den lerneffekt verweisen.  :?
zur not würde es auch mit copy und paste gehen, aber zu irgendwas sollte so eine bibliothek ja auch gut sein, oder? ich habe jetzt das folgende gemacht (siehe unten):
in meiner klasse habe ich einen pointer auf einen typ der klasse selbst eingeführt, um so in meiner funktion auf die klasse zugreifen zu können.
compiliert jetzt, lässt sich aber leider nicht verlinken...  :(  (gcc beschwert sich über "undefined reference"s)

class MatheKlasse
{
          .....
           double DieBesteFunktion(double);
           double suberfunktion (void);
           static MatheKlasse* DieMK;
           static double tollefunktion(double);
}

double MatheKlasse::suberfunktion (void)
{
           DieMK = this;
           x = integral (tollefunktion);
           ....          
           return x;
}

double MatheKlasse::tollefunktion(double x)
{
           return DieMK->DieBesteFunktion(x);
}
mfg,
Farnaby

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #7 am: 20. December 2005, 14:51 »
Du musst in ner cpp Datei die Membervariable DieMK definieren oder deklarieren (bin mir net sicher welches des jetzt is  :oops: ). Sprich:

MatheKlasse *MatheKlasse::DieMK = new MatheKlasse();

Das Problem is nur, dass du dem Benutzer deiner Klasse die gleiche Instanz (DieMK) geben musst sonst wirds problematisch mit den (nicht static) Membervariablen. D.h. private Kon/Destruktor + eine static getInstance() Funktion.[/quote]
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Farnaby

  • Beiträge: 5
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 20. December 2005, 15:36 »
Funktioniert jetzt so!  8)
Vielen Dank!
mfg,
Farnaby

 

Einloggen