Objekte der selben Klasse mit verschiedenen Funktionen
-
Oder Polymorphie.
Was willst du machen?
-
es soll ein kleines programm werden, in dem mehrere optionen zur verfügung sein sollen, zwei videos überzublenden, allerdings würde ich gerne nur eine klasse fades und dann die methode dazu als variable, datei, ... speichern
-
jonnybx schrieb:
es soll ein kleines programm werden, in dem mehrere optionen zur verfügung sein sollen, zwei videos überzublenden, allerdings würde ich gerne nur eine klasse fades und dann die methode dazu als variable, datei, ... speichern
Funktionszeiger.
Außer, die mehreren Optionen haben Optionsspezifische Einstellungen. Die müßten dann in eine Klasse rein, also gleich Polymorphie.
Außer, es ist so einfach, daß switch doch besser ist.
-
Du könntest mit Funktionszeigern arbeiten.
Das läuft aber darauf hinaus, dass du eine freie Funktion hast, welche als ersten Parameter einen Zeiger auf das gegebene Objekt nimmt.
Was dich dann wieder dahin bringt, dass du die Funktion auch einfach als Memeberfunktion implementieren hättest können.Wenn du nur unterschiedliches Verhalten für verschiedene Instanzen haben willst, aber trotzdem eine einheitliche Schnittstelle, dann gibt es dazu Polymorphie.
Es wäre wahrscheinlich besser den Grund für dein verlangen für so ein Verhalten zu erfahren, dann können wir sicher besser helfen.

//EDIT:
Das passiert, wenn man einen Post schreibt, weitercodet und dann merkt, dass man den Beitrag noch nicht gesendet hat und nicht nachschaut, ob wer was geschrieben hat und sendet.
-
Für mich klingt das so, als sei es am besten mit der Strategy Pattern zu lösen. Am besten mit std::tr1::function, dann kann man da neben Funktionszeigern auch Funktionsobjekte reinwerfen, die einen Zustand haben. Dann muss man optionsspezifische Einstellungen auch nicht mehr in der Frontend-Klasse verwalten.
-
Ich würds so machen:
template <typename OptionFkt> class Fades { public: fades(OptionFkt option) : option(option) {} // ... void doFade() { option(...); } private: OptionFkt option; // ... }; struct my_option_1 { void operator()(...) { // Method implementation for option 1 } }; struct my_option_2 { void operator()(...) { // Method implementation for option 2 } }; int main() { // ... Fades fades(my_option_1()); // Create fader with option 1 // ... }
-
Max3000 schrieb:
Ich würds so machen:
template <typename OptionFkt> class Fades { public: fades(OptionFkt option) : option(option) {} // ... void doFade() { option(...); } private: OptionFkt option; // ... }; struct my_option_1 { void operator()(...) { // Method implementation for option 1 } }; struct my_option_2 { void operator()(...) { // Method implementation for option 2 } }; int main() { // ... Fades fades(my_option_1()); // Create fader with option 1 // ... }Ich würde Fades nicht zum Template machen.
-
also, um das klarzustellen.
Es soll ein kleines videoschnitt-programm werden, mit dem ich zwei videos überblenden will. Dazu soll es mehrere arten geben, wobei ich bei der sauswahl der art nur ein objekt für jede art haben will, nicht eine klasse
(statt den Klassen Blende1, Blende2, Blende3 die Objekte Blende1, Blende2, ...)
-
jonnybx schrieb:
also, um das klarzustellen.
Es soll ein kleines videoschnitt-programm werden, mit dem ich zwei videos überblenden will. Dazu soll es mehrere arten geben, wobei ich bei der sauswahl der art nur ein objekt für jede art haben will, nicht eine klasse
(statt den Klassen Blende1, Blende2, Blende3 die Objekte Blende1, Blende2, ...)Dann nimm einfach enum und switch. Mach erstmal das Projekt fertig. Aber lies dann auch ein wenig Bäckmann oopfd und Meyer mecp.
-
Hast du ja mit der oben genannten Lösung.
Da heißt die Klasse Fader und da gibt fader1 mit my_option_1 im Konstruktor übergeben, fader2 mit my_option_2 und so weiter.