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

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

51

31.01.2007, 22:02

Jep, per Initialisierungsliste geht das:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class foobar
{
private:
    const int xyz;

public:
    foobar()
        : xyz( 0x7fffffff )
    {}

    operator int() const
    {
        return xyz;
    }
};


Aber es ist durchaus nicht sinnlos konstante Variablen in Klassen zu verwenden, warum denn auch? Statische Variablen sind auf Klassenebene gültig, konstante Variablen auf Objektebene. Wenn das nicht Sinn genug ist...

Zitat von »"$nooc"«


CJaeger erbt public und protected v. CRaumschiff


Ich glaub du hast das doch noch nich kapiert!

Zitat von »"$nooc"«


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
class CRaumschiff
{
    // P R O T E C T E D ##########################

protected:
        // M e m b e r _ V a r i a b l e s

    unsigned long        m_Health;
    unsigned long        m_Armor;
    unsigned long        m_MaxSpeed;
    unsigned long        m_MainCanonDamage;
    bool            m_Flying;
    const int test = 10;
      // [...]

}



Warum verwendest du überall unsigned long??? :))) Ich seh das in dem Board so häufig, aber ich glaube irgendwie keiner weiß genau warum er das tut! ;) Und ich würde lügen wenn ich da nicht einen Zusammenhang zu Patrick feststellen würde. ^-)
@D13_Dreinig

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

52

31.01.2007, 22:28

Zitat von »"David_pb"«

Aber es ist durchaus nicht sinnlos konstante Variablen in Klassen zu verwenden, warum denn auch? Statische Variablen sind auf Klassenebene gültig, konstante Variablen auf Objektebene. Wenn das nicht Sinn genug ist...
Autsch, da hast du natürlich Recht, wie peinlich ^^

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

53

31.01.2007, 23:54

@ David_pb:

wenn ich hab:

class CJaeger : public CRaumschiff
bedeutet dass doch dass CJaeger jetzt alles von public erbt, und zugriff auf protected hat oder? ... ansonst muss ich mir das echt mal genauer ansehn ^^

hm.. für das unsigned hab ich eine erklärung (im vorhinein, ja das kannst du ruhig mit patrick in verbindung setzen :D)

das unsigned verwende ich deswegen weil ich bei diesen variablen wohl nie in den negativen bereich kommen werde.. das long verwende ich weil ich gelesen hab dass die größe v. integer system abhängig ist.. und der nächst kleinere typ ist long.. und naja.. da speicher heutzutage sowieso durch die gegend geschleudert wird ^^ denk ich mir, kanns ja nicht so schlimm sein..

aber wenn du mir davon abrätst, immer long zu verwenden.. würde mich freun wenn du mir die gründe nennst ^^ ich bin immer froh wenn mir jem. was erklärt :)

@ gurke:
mir ist sogar tatsächlich eingefallen wofür ich eine konstante variable gebrauchen 'könnte'
mal angenommen ich will verschiedene arten von raumschiffen haben.. aber eines haben sie alle gemeinsam: eine kanone!
und diese kanone macht zum beispiel 100 punkte schaden..
und genau das soll bei jeden schiff gleich bleiben, und sich auch nicht verändern lassen..

wäre dafür ne konstante var. gut genug? oder gäbe es da auch ne andere lösung? ^^


so und wenn ich schon dabei bin, kann mir das einer erklären wie das jetzt genau funktioniert mit dem initialisieren von const variablen? also.. ich bekomm das anscheinend nicht auf die reihe! wenns geht bitte anhand eines kleinen beispiels zeigen, und vllt. noch ein bischen erklären was da was bedeutet.. denn um ehrlich zu sein verwirrt mich das gekritzel ein wenig :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class foobar 
{ 
private: 
    const int xyz; 

public: 
    foobar() 
        : xyz( 0x7fffffff ) 
    {} 

    operator int() const 
    { 
        return xyz; 
    } 
};



*EDIT:

ich hoffe es hat keiner was dagegen wenn ich den quellcode poste, sobald ich der meinung bin, dass ich genug geübt hab.. dann wäre es nice wenn sie den jemand ansieht, und bezüglich OOP beurteilt.. kann auch kritik über stil usw. einstecken.. aber wie gesagt: erst dann wenn ich experimentiert hab ^^
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

54

01.02.2007, 00:22

C-/C++-Quelltext

1
2
3
    foobar() 
        : xyz( 0x7fffffff ) 
    {}

Ich denke mal das verwirrt dich, denn das sieht man nicht all zu oft (zumindest sehe ich es nur sehr selten).
foobar() ist ja der Konstruktor und hinter dem Konstruktor hat man die Möglichkeit hinter einem Doppelpunkt Konstruktoren für Membervariablen aufzufrufen. Hier wird also der Konstruktor für die Variable xyz aufgerufen. Der Konstruktor eines ints erwartet eine Variable, nämlich den Wert des ints und der wird hier auf den Hex-Wert 0x7fffffff gesetzt.
{} ist dann der eigentliche Body des Konstruktors und der ist leer, da der Konstruktor eigentlich nichts machen muss.

C-/C++-Quelltext

1
2
3
4
    operator int() const 
    { 
        return xyz; 
    } 

Das hier definiert einen Cast von foobar nach int.
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

55

01.02.2007, 00:28

also wenn ich das compilieren lasse

C-/C++-Quelltext

1
2
3
4
        // M e m b e r _ F u n c t i o n s

            CRaumschiff     (unsigned long Health, unsigned long Armor) 
                : test(1)
            {}


beschwert sich mein compiler, dass CRaumschiff() schon einen body hat.. is ja auch logisch, weil das auch tatsächlich so ist ^^
also irgendwo ist da ein syntax-fehler .. ;)
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

56

01.02.2007, 01:03

lass mal die Geschweiften Klammern im Header weg

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

57

01.02.2007, 07:52

Zitat von »"$nooc"«


class CJaeger : public CRaumschiff
bedeutet dass doch dass CJaeger jetzt alles von public erbt, und zugriff auf protected hat oder? ... ansonst muss ich mir das echt mal genauer ansehn ^^


Nein, wenn CJaeger öffentlich von CRaumschiff erbt, dann erbt CJaeger alles von CRaumschiff. Es wird also eine ist ein Beziehung erzeugt => CJaeger ist ein CRaumschiff.
Außerdem kann CJaeger, weil es ja ein CRaumschiff ist, auf geschützte Bereiche von sich zugreifen, nur der Zugriff auf private Bereich bleibt verboten!

Zitat von »"$nooc"«


hm.. für das unsigned hab ich eine erklärung (im vorhinein, ja das kannst du ruhig mit patrick in verbindung setzen Very Happy)

das unsigned verwende ich deswegen weil ich bei diesen variablen wohl nie in den negativen bereich kommen werde.. das long verwende ich weil ich gelesen hab dass die größe v. integer system abhängig ist.. und der nächst kleinere typ ist long.. und naja.. da speicher heutzutage sowieso durch die gegend geschleudert wird ^^ denk ich mir, kanns ja nicht so schlimm sein..

aber wenn du mir davon abrätst, immer long zu verwenden.. würde mich freun wenn du mir die gründe nennst ^^ ich bin immer froh wenn mir jem. was erklärt :)


Ich sehe nur das unsigned long in großem Übermaß verwendet wird. Ich rate zwar niemand ab das zu verwenden, allerdings sollte man immer genau den Typ verwenden der für die jeweilige Aufgabe am besten geeignet ist.

Und die Begründung int ändere sich von Plattform zu Plattform ist schwach. Ein long tut das nämlich genauso. Der Unterschied ist die Mindestgröße beider Typen.

Zitat


beschwert sich mein compiler, dass CRaumschiff() schon einen body hat.. is ja auch logisch, weil das auch tatsächlich so ist ^^
also irgendwo ist da ein syntax-fehler .. ;)


Entweder du definierst den c'tor ganz in der Klassendeklaration oder du definierst ihn (sammt Initialisierungsliste) extern. Aber zweimal Definieren ist nich!
@D13_Dreinig

$nooc

Alter Hase

  • »$nooc« ist der Autor dieses Themas

Beiträge: 873

Wohnort: Österreich / Kärnten

Beruf: Schüler

  • Private Nachricht senden

58

02.02.2007, 15:48

ok leute.. :D

danke .. ich habs +g+
Am Anfang der Weisheit steht die eigene Erkenntnis, dass man selbst nichts weiß! - Sokrates

Werbeanzeige