Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Lemming

Alter Hase

  • »Lemming« ist der Autor dieses Themas

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

1

16.10.2005, 20:41

initialisierung im konstruktor? das dann noch vererben?

hi ich hab mal nen paar fragen zum thema objektorientierung in c++

1.:
ich möchte nen spiel auf ner application class (singleton ) aufbauen und möchte das so machen, dass man in der WinMain nur noch application::go()
aufrufen muss und ab dann alles von allein abläuft.
jetzt meine eigentlich frage und zwar wenn ich beigehe und im construktor der application class schon init und load und so weiter aufrufe und im destruktor dementsprechend exit und so, führt das zu irgendwelchen problemen oder is das unüblich?

2.:
basiert eigentlich auf 1. und zwar hab ich mir gedacht, wenn ich das so mache dann kann ich ja alle im spiel vorkommenden klassen von ner CObject oder so erben lassen und nur in deren konstruktor die aufrufe von init und load und im destruktor das andere zeugs reinpacken, dann muss ich das nich für jede klasse neu machen. ich hab das mal so gemacht, nur das funktioniert nicht, wenn ich das so probiere dann führt er nur init und exit von CObject aber nicht von den erben aus... wie mach ich das?
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Anonymous

unregistriert

2

16.10.2005, 20:45

zu 1. Da wirste paar Probleme kriegen mit der WndProc (kann ich singen ;))

zum Titel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class basic
{
public:
    basic (unsigned long id) : id_(id) {}
    virtual ~basic (void) {}

private:
    unsigned long id_;
}

class foobar : public basic
{
public:
    foobar (unsigned long id) : basic(id) {}
    foobar (void) {}
}

Lemming

Alter Hase

  • »Lemming« ist der Autor dieses Themas

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

3

16.10.2005, 22:24

Titel dass das so geht weiß ich auch, was mich interessiert ist folgendes problem:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class CBase
{
public:
    CBase(){Init();}
    virtual void Init(){cout<<"Base";}
};// CBase


class CFoo : CBase
{
public:
    virtual void Init(){cout<<"Foo";}
};// CFoo


int _tmain(int argc, _TCHAR* argv[])
{
    CFoo foo;

    getch();

    return 0;
}

Ausgabe: "Base"

Wie krieg ich es hin, dass hier die Ausgabe "Foo" gebracht wird?
denn das, was ich erreichen will ist dass ich in den abgeerbten klassen nicht mehr in den konstruktor reinschreiben muss, dass sie init aufrufen sollen. ich hätts gern, wenn das automatisch ginge...

zu 1.
wieso und wie soll ich da probleme mit der WndProc kriegen, dass versteh ich nich
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Anonymous

unregistriert

4

16.10.2005, 22:27

mach doch das virtual weg? dann gehts.

Naja Funktionspointer, Callbacks und Klassen mögen sich nicht ;)

Lemming

Alter Hase

  • »Lemming« ist der Autor dieses Themas

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

5

16.10.2005, 22:57

so oder wie?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class CBase
{
public:
    CBase(){Init();}
    void Init(){cout<<"Base";}
};// CBase


class CFoo : CBase
{
public:
    void Init(){cout<<"Foo";}
};// CFoo


int _tmain(int argc, _TCHAR* argv[])
{
    CFoo foo;

    getch();

    return 0;
}

gibt immer noch die ausgabe: "Base"

edit: und sag bitte zu 1. noch mal was genaueres
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

6

16.10.2005, 22:58

Zitat von »"nix da"«

mach doch das virtual weg? dann gehts.

Nicht wirklich ;)

Zitat von »"Lemming"«


Wie krieg ich es hin, dass hier die Ausgabe "Foo" gebracht wird?
denn das, was ich erreichen will ist dass ich in den abgeerbten klassen nicht mehr in den konstruktor reinschreiben muss, dass sie init aufrufen sollen. ich hätts gern, wenn das automatisch ginge...

In diesem Fall meiner Meinung gar nicht. Denn Init wird im Konstuktor von CBase aufgerufen und dort hat Init nun mal die Aufgabe Base auszugeben

mfg Philipp

Lemming

Alter Hase

  • »Lemming« ist der Autor dieses Themas

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

7

16.10.2005, 23:04

Zitat


In diesem Fall meiner Meinung gar nicht. Denn Init wird im Konstuktor von CBase aufgerufen und dort hat Init nun mal die Aufgabe Base auszugeben

gibts wirklich keine möglichkeit dem zu sagen er soll das Init() der letzten vererbung nehmen. dafür ist doch diese vftable auch da oder nich?
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

8

16.10.2005, 23:22

Also ich habe das per Funktionszeiger umgangen.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Lemming

Alter Hase

  • »Lemming« ist der Autor dieses Themas

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

9

16.10.2005, 23:44

Zitat von »"Nox"«

Also ich habe das per Funktionszeiger umgangen.

zeig mal nen stück code, ich weiß nich wie du das meinst
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

10

16.10.2005, 23:51

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class netzwerk  
{
    static int countinstance; 
protected:
    int Socket;
    void (*Funktion)(void*);
    
public: 
    #ifdef _WIN32
    static CRITICAL_SECTION Errorsec;
    #else
    static pthread_mutex_t Errorsec;
    #endif
    netzwerk();
    ~netzwerk();
    Status status;
    char* LastError;
    void empfangstarten(void);
    void geterror(void);
};

class clientclass : public netzwerk
{
protected:
    static void empfangen(void*);
    void AddPaket(Paket*);

public:
    Paket* QueryPaket(void);
    clientclass();
    ~clientclass();
    void senden(void* daten, int size, int ID); 
    void Ping(void);
    
    traeger *empfangenedaten;

    int lastping;
};

C-/C++-Quelltext

1
2
3
4
5
clientclass::clientclass() : empfangenedaten(NULL)
{
    lastping = -1;
    Funktion = empfangen;
}


nicht ideal, aber es funzt und man muss nur den Zeiger befüllen.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige