JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Klassen -> Konstruktor

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
magynhard
Super JLI'ler



Anmeldedatum: 26.04.2003
Beiträge: 461
Wohnort: Wild durch die Welt ;-)
Medaillen: Keine

BeitragVerfasst am: 24.07.2004, 15:36    Titel: Klassen -> Konstruktor Antworten mit Zitat

Ich probiere gerade um mir die Funktion der Klasse besser einzuprägen, ein wenig damit herum.
Nun bin ich auf ein Problem gestoßen und suche die Lösung, für das, was ich hier auskommentiert habe (am Quelltextende), denn das ist falsch und soll veranschaulichen, was ich tun möchte:

Code:


class Motor
{
 public:
    Motor(int ps, int drehzahl);
    Motor() { };
    ~Motor();

    void SetPs(int wert)      { itsPs = wert;            };
    void SetDrehzahl(int wert)   { itsDrehzahl = wert;      };

    int GetPs(void)         { return itsPs;            };
    int GetDrehzahl(void)      { return itsDrehzahl;      };

 private:
    int itsPs;
    int itsDrehzahl;
};

Motor::Motor(int ps, int drehzahl)
{
   itsPs = ps;
   itsDrehzahl = drehzahl;
}

Motor::~Motor()   {   }


class Auto
{

 public:
    Auto(int baujahr, int kilometer, int geschwindigkeit);
    ~Auto();

    void SetBaujahr(int wert);
    void SetKilometer(int wert);
    void SetGeschwindigkeit(int wert);

    int GetBaujahr(void) const;
    int GetKilometer(void) const;
    int GetGeschwindigkeit(void) const;

    Motor Automotor;

 private:
    int itsBaujahr;
    int itsKilometer;
    int itsGeschwindigkeit;
};

Auto::Auto(int baujahr, int kilometer, int geschwindigkeit)
{
   itsBaujahr = baujahr;
   itsKilometer = kilometer;
   itsGeschwindigkeit = geschwindigkeit;
}

Auto::~Auto() {      };

inline void Auto::SetBaujahr(int wert)         {   itsBaujahr = wert;         }
inline void Auto::SetKilometer(int wert)      {   itsKilometer = wert;      }
inline void Auto::SetGeschwindigkeit(int wert)   {   itsGeschwindigkeit = wert;   }

int Auto::GetBaujahr(void) const            {   return itsBaujahr;         }
int Auto::GetKilometer(void) const            {   return itsKilometer;      }
int Auto::GetGeschwindigkeit(void) const      {   return itsGeschwindigkeit;   }



int main(void)
{
   Auto Porsche(1980,200000,300);
   //Porsche.Automotor(320,7000);
        ...
}


Ich möchte dem Automotor mit einem Aufruf gleich beide Werte über den Konstruktor zuweisen, was der Kompilierer mir aber nicht erlaubt.
Code:

 error C2064: term does not evaluate to a function


Muss ich zur Problemlösung jetzt eine eigene Funktion in der Klasse erstellen wie
Code:

void SetPsDrehzahl(int ps, int drehzahl);

oder kann ich den Konstruktor doch dazu irgendwie nutzen?
Wäre sonst halt doppelt gemoppelt, wenn ich z.B. auch einen Motor mit 2 Parametern erstellen können soll. Confused

Aber wenn der Konstruktor nur dazu da is... Rolling Eyes
_________________
Niemand ist hoffnungsloser versklavt als der, der fälschlich glaubt frei zu sein. [J. W. Goethe]
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: 24.07.2004, 15:43    Titel: Antworten mit Zitat

Wie du das hingeschrieben hast, geht das aber gar nicht....

Mach das am Besten so:

in der Klasse:
Auto(int ps, int drehzahl) { SetPsDrehzah(ps, drehzahl); }
void SetPsDrehzahl(int ps, int drehzahl);

Ansonsten wenn dir das nicht gefällt, kannst du ja gerne den =Operator überladen, das wäre eine Möglichkeit Wink
_________________
The source of all power is in its destiny...
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: 24.07.2004, 15:53    Titel: Antworten mit Zitat

warte mal, ich hab grade nachgeschaut du könntest sogar den ()Operator überladen, ginge dann so:

Auto Porsche(1980,200000,300);
Porsche(320,7000);

Diese Operatoren kannst du alle überladen:
Code:
+ - * / % ^
+= -= *= /= %= ^=
++ — < > ! =
& | << >> != ==
&= |= <= >= () []
&& || <<= >>= new delete

_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
HotAcid
Super JLI'ler


Alter: 43
Anmeldedatum: 04.08.2002
Beiträge: 372
Wohnort: Berlin
Medaillen: Keine

BeitragVerfasst am: 24.07.2004, 16:01    Titel: Antworten mit Zitat

wie wärs mit

Code:
Porsche.Automotor = new Motor(123,456,789);


dann müsstest du allerdings Automotor als Pointer deklarieren:

Code:
Motor* Automotor;


und das ganze dann später mit delete wieder freiegeben:

Code:
delete Automotor;


cu Felix[/code]
_________________
StGB §§ 328 Abs. 2 Pkt 3:
Mit Freiheitsstrafe bis zu fünf Jahren oder mit Geldstrafe wird bestraft, wer eine nukleare Explosion verursacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik 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