JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=e6fd7d9a28e0bea3b7764f65e917911cMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Klassen, Sonderfunktion??

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 07.08.2005, 08:20    Titel: Klassen, Sonderfunktion?? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 07.08.2005, 08:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 07.08.2005, 08:49    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 07.08.2005, 09:05    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 07.08.2005, 09:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 07.08.2005, 09:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 07.08.2005, 09:19    Titel: Antworten mit Zitat

TheMillenium
Mach doch überlappende initialisierunglisten in den Konstruktor rein? Wo ist das Problem?
_________________
'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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 07.08.2005, 09:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 07.08.2005, 09:41    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 07.08.2005, 09:55    Titel: Antworten mit Zitat

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..Sad
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 07.08.2005, 09:59    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 07.08.2005, 11:19    Titel: Antworten mit Zitat

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 Wink

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 07.08.2005, 11:32    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 08.08.2005, 08:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum