Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 07.08.2005, 08:20 Titel: Klassen, Sonderfunktion?? |
|
|
Kann man ohne zuvor ein Objekt davon zu erzeugen, einer Klasse eine Initialisierungsfunktion zuweisen die jedes neuerstellte Objekt automatisch ausführt?
also:
class object
{
//...
};
void Intialisierung(object* object)
{
//do stuff
}
// Befehl den ich suche
object test; // test ruft jetzt automatisch Intialisierung auf
// ich kann mit test arbeiten..da es initialisiert wurde _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 07.08.2005, 08:28 Titel: |
|
|
Nennt sich Konstruktoren und Destruktoren. Eigentlich sollten die in jedem guten und schlechten C++ Tutorial drin behandelt werden. _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 07.08.2005, 08:49 Titel: |
|
|
mhh..also gibt es nicht?
dann muss ich wohl doch vererben...obwohl sich das nicht lohnen würde...
Ich habe eigentlich eine Struktur, die ich in vielen Programmen brauche, aber unterschiedlich initialisiere...deshalb wollte ich der einmal einen Funktionspointer übergeben und immer wenn ich ein neues Objekt erstelle soll das automatisch mit der Funktion initialisiert werden..geht soetwas nicht ohne Vererbung? da müsste ich dann nämlich auch den Namen der Struktur ändern und das will ich nicht unbedingt.. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 07.08.2005, 09:05 Titel: |
|
|
Was redest du denn da???
Mit Vererbung hat das NIX zu tun.
Du nutzt einfach den Klassenkonstruktor!
CPP: | class abc
{
public abc()
{
// do something - use this->member
}
}
abc MeinABC=new abc(); // hier wird der Konstruktor aufgerufen...
|
PS.: Von dir hätte ich keine solche Frage mehr erwartet, TheMillenium! _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 07.08.2005, 09:08 Titel: |
|
|
Ich hab doch gesagt dass ich diese Struktur/Klasse in mehreren Projekten benutzen will und in jedem Projekt brauch ich ne andere Initialisierungsfunktion...ist also was ganz anderes...ich könnte dafür natürlich ne andere Funktion im Konstruktor reinschreiben, die dann aufgerufen wird, ist aber nicht sehr elegant.. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 07.08.2005, 09:11 Titel: |
|
|
Dann mach daraus ne Basisklasse (meinetwegen Abstrakt) und pack das ganze in ne eigene lib (statisch ist da besser, du musst nicht wegen einer Klasse gleich ne DLL nehmen).
Von dieser kannst du in deinen Programmen dann erben - dann ist das so OK. _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 07.08.2005, 09:37 Titel: |
|
|
ich wollte das jetzt so machen, aber das klappt nicht:
Code: | template <class T>
class sGenome // Genom: Gesamtzahl der Gene der Fortpflanzungszelle
{
private:
vector<T> vecGene; // Einzelne Gene
double dFitness; // Fitness der Fortpflanzungszelle
public:
sGenome():dFitness(0){}
SGenome(int num, void (*func)(T&))
{
for(int i=0;i<num;i++)
vecGene<T>.push_back(func());
}
~SGenome()
{
vecGene<T>.empty();
}
}; |
void main()
{
sGenome<int> test(10,FILL_01);
}
FILL_01 ist ein Define für eine Funktion
Erros:
Zitat: | c:\simple ai\ai_base.h(34): warning C4183: 'SGenome': missing return type; assumed to be a member function returning 'int'
c:\simple ai\main.cpp(6) : see reference to class template instantiation 'sGenome<T>' being compiled
with
[
T=int
]
c:\simple ai\ai_base.h(38): error C2523: 'sGenome<T>::~SGenome' : destructor tag mismatch
c:\simple ai\ai_base.h(38): error C2523: 'sGenome<T>::~SGenome' : destructor tag mismatch
with
[
T=int
]
c:\simple ai\main.cpp(6): error C2661: 'sGenome<T>::__ctor' : no overloaded function takes 2 arguments
with
[
T=int
]
and
[
T=int
]
c:\simple ai\ai_base.h(37): warning C4183: 'SGenome': missing return type; assumed to be a member function returning 'int'
|
_________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
GreveN JLI Master
Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 07.08.2005, 09:41 Titel: |
|
|
Ohne jetzt behaupten zuwollen, dass der restliche Code stimmt, das tut doch in den Augen weh:
CPP: | 'sGenome<T>::~SGenome' |
btw.: Wir haben neuerdings cpp-Tags, feine Sache... |
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 07.08.2005, 09:55 Titel: |
|
|
GreveN hat Folgendes geschrieben: | Ohne jetzt behaupten zuwollen, dass der restliche Code stimmt, das tut doch in den Augen weh:
CPP: | 'sGenome<T>::~SGenome' |
btw.: Wir haben neuerdings cpp-Tags, feine Sache... |
aber ich weiß nicht wie ich das lösen soll...nicht einmal im Ansatz.. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 07.08.2005, 09:59 Titel: |
|
|
naja das S durch ein s ersetzen vielleicht? wäre nur so eine möglichkeit?
aber dann wird er es immer noch nicht mal ansatzweise compilieren weil vector einen typ T erwartete du jedoch einen typ von void (*func)(T&) übergibst. _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 07.08.2005, 11:19 Titel: |
|
|
Zeig doch am besten mal ein Beispiel für eine solche Initialisierungsfunktion, die du dem Konstruktor übergeben willst. Dann sehen wir am besten, was du damit bezwecken willst
Einem vector vom Typ T(den du hier mit int gewählt hast), kannst du ja schlecht einen Funktionspointer hinzufügen. Deshalb muss diese Funktion wie Patrick schon erwähnt hat einen int zurückgeben(bzw. einen Wert vom Typ T). _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 07.08.2005, 11:32 Titel: |
|
|
Vielleicht hilft dir eine art adapter pattern:
CPP: | struct IGenomeAdapter
{
virtual int getSomeValue() = 0;
virtual std::string getSomeOtherValue() = 0;
}
class Genome
{
Genome( IGenomeAdapter* adapter )
{
adapter->getSomeValue();
}
}
|
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 08.08.2005, 08:38 Titel: |
|
|
Ich bau jetzt einfach allemöglichen Initialisierungsmethoden in die Funktion ein und wenn ich lustig bin, schreib ich einfach noch eine Callback-Funktion mit der man dann auch von außen die Klasse beliebig initialisieren kann.. _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
|