Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Funktionsaufrufe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
20.08.2003, 14:57 Uhr
typecast
aka loddab
(Operator)


Hallo
weiß jemand ob es möglich ist ein Objekt so zu schreiben, dass man einer Instanz des Objektes eine Funktion zuweisen kann. Das dann etwa so etwas möglich ist.

C++:
  Objekt Instanz1;
  Objekt Instanz2;
  ...
  Instanz1.funkt = funktion1;
  Instanz2.funkt = funktion2;
  ..
  Instanz1.funkt();
  Instanz2.funtk();
  ..


Dabei soll dann die Instanz1 die funktion1 und die Instanz2 diefunktion2 ausführen.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.08.2003, 15:41 Uhr
virtual
Sexiest Bit alive
(Operator)



C++:
#include <iostream>

typedef int (*funktion_t)();


struct Objekt
{
    funktion_t funkt;

    Objekt() :funkt(NULL) { }
};


int function1()
{
    std::cout<<"Funktion 1"<<std::endl;
    return 1;
}

int function2()
{
    std::cout<<"Funktion 2"<<std::endl;
    return 2;
}



int main()
{
    Objekt Instanz1;
    Objekt Instanz2;

    Instanz1.funkt = function1;
    Instanz2.funkt = function2;

    Instanz1.funkt();
    Instanz2.funkt();
}



Aber sag mal lieber, was Du vorhast. Übrigens sind die STL Funktoren ganz brauchbar und ziemlich flexibel
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.08.2003, 15:47 Uhr
typecast
aka loddab
(Operator)


Genau das was ich gesucht habe. Ich brauche das z.B. für einen Button. Wird auf den Button geklickt, dann übernimmt eine Funktion das zeichen im gedrückten und im nicht gedrückten Zustand. Dabei werden verschiedene mehrere Funktionen ausgeführt (wenn die Maustaste gedrückt wird, wenn sie Losgelassen wird...) Bei jedem dieser Eregnisse soll dann eine dazugehörige Funktion aufgerufen werden. Diese sollen bei jedem Button andere sein.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.08.2003, 16:23 Uhr
virtual
Sexiest Bit alive
(Operator)


@loddab
Das Problem bei dem vom mir gezeigten Ansatz ist ja, daß die Funktionen gloabal sind und in keiner Relation zu der umgebenden Klasse haben (ganz zu schweigen von dem public Member). Wenn normale virtuelle Funktionen für Dich keine Alternative sind, dann wären ggf. STL Functoren und/oder member functionAdaptor (auch STL) eine Alternative. Du hast die wahl...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.08.2003, 17:13 Uhr
typecast
aka loddab
(Operator)


Wie könnte ich denn das mit virtuellen Funktionen verwirklichen?
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.08.2003, 17:18 Uhr
0xdeadbeef
Gott
(Operator)



C++:
class BaseButton {
public:
  virtual void do_when_pushed() = 0;
};

class Button1 : public BaseButton {
public:
  virtual void do_when_pushed();
};

class Button2 : public BaseButton {
public:
  virtual void do_when_pushed();
};

void Button1::do_when_pushed() { std::cout << "Button 1" << std::endl; }
void Button2::do_when_pushed() { std::cout << "Button 2" << std::endl; }

int main() {
  BaseButton *my_button1 = new Button1();
  BaseButton *my_button2 = new Button2();

  my_button1->do_when_pushed();
  my_button2->do_when_pushed();

  delete my_button1;
  delete my_button2;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.08.2003, 17:20 Uhr
0xdeadbeef
Gott
(Operator)


Oder auch

C++:
void push(BaseButton &bt) {
  bt->do_when_pushed();
}

int main() {
  Button1 b1;
  Button2 b2;

  push(b1);
  push(b2);
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.08.2003, 17:37 Uhr
typecast
aka loddab
(Operator)


Hm das neue ableiten wollte ich eigentlich vermeiden
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.08.2003, 09:08 Uhr
0xdeadbeef
Gott
(Operator)


Ich würde an deiner Stelle eher globale Funktionen und Funktionspointer vermeiden, als ein paar Klassen mehr zu schreiben, aber mach was du willst.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
21.08.2003, 11:26 Uhr
typecast
aka loddab
(Operator)


Im Endeffekt werde ich die Leute fragen die die Klassen benutzen werden was ihnen besser gefällt. Warum sollte man deiner Meinung nach globale Funktionen und Funktionspointer vermeiden?
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: