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

Sheddex

unregistriert

21

19.03.2007, 15:12

UPDATE: Das gewünschte "const" sowie eine neue Sicherheitsabfrage sowohl in der Write- als auch Read-Methode.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

22

19.03.2007, 16:29

Zitat von »"DragonFlame"«

UPDATE: Das gewünschte "const" sowie eine neue Sicherheitsabfrage sowohl in der Write- als auch Read-Methode.

Also normale Parameter, die per Value übergeben werden const zu deklarieren ist ziemlich sinnlos. Das ist übertrieben.

Außerdem sollten IsOpen(), GetSize() und GetPointerPosition() const sein.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

23

19.03.2007, 16:53

Genau, vorallem Methoden die nichts am Objekt selber ändern sollten Konstant sein:

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
class File
{
   private:

      //Dateihandle

      void* FileHandle;

   public:

      //Konstruktor

      File(void);

      //Destruktor

      ~File(void);

      //Methoden

      bool IsOpen(void) const; // <- hier

      bool Close(void);
      bool Open(const TCHAR* Filename, const unsigned long Creation);     
      bool Write(const void* Data, const unsigned int Size, unsigned long* WrittenBytes = NULL);
      bool Read(void* Data, const unsigned int Size, unsigned long* ReadBytes = NULL);

      unsigned long GetSize(void) const; // <- hier


      bool SetPointerPosition(const long Distance, const unsigned long StartingPoint = FILE_CURRENT);
      long GetPointerPosition(void) const; // <- hier

};


Das hat folgenden Vorteil. Konstante Methoden können mit konsanten Objekten aufgerufen werden. Es spricht nichts dagegen aus einem "const File xyz" die Dateigröße abzufragen.

Außerdem macht eine korrekte Anwendung von "const" möglich das Konstante Referenzen als Parameter an Funktionen übergeben werden können. Was wiederum ein langwieriges Kopieren der Objekte unterbindet.

C-/C++-Quelltext

1
2
3
4
void foobar( const File& blubb )
{
  long size = blubb.GetSize(); // Geht NUR wenn GetSize() konstant ist

}


grüße
@D13_Dreinig

Sheddex

unregistriert

24

19.03.2007, 16:57

Ich denke man merkt dass ich sonst nie mit const arbeite :D

Ich glaub' aber ich hab's jetzt kapiert: const bei Pointern und Referenzen in der Parameterliste die intern nicht verändert werden. Und scheinbar sollte es auch bei sämtlichen Rückgabewerten stehen... allerdings habe ich bisher kaum Funktionen gesehen die ein const vor dem Rückgabetyp stehen haben...

EDIT: Während man wo anders rumsurft und vergessem hat auf Absenden zu klicken steht schon wieder was da^^

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

25

19.03.2007, 17:00

Konstante Funktionen und konstante Rückgabetypen sind aber ein unterschied. Ich hab oben konstante Funktionen demonstriert. Konstante Rückgabetypen brauchst du u.A. wenn du eine Referenz auf ein Klassenmemberobjekt zurückgibst das nicht geändert werden soll. Und natürlich wenn du eine Referenz auf ein solches zurückgibst und die Methode konstant ist!
@D13_Dreinig

Sheddex

unregistriert

26

19.03.2007, 17:05

Äh, lasst mich das einfach mal verdauen, bis dahin lasse ich es so wie es jetzt ist: const bei Pointern die intern nicht verändert werden.
Wer hätte gedacht dass man sich plötzlich mit const rumschlagen muss, nur weil man ein Tutorial geschrieben hat^^

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

27

19.03.2007, 17:10

Gerne, hoffe es liegt dir nicht zu schwer im Magen! Solltest du dich halbwegs erholt haben kannst dir ja mal die Links weiter unten durchsehen.

http://www.parashift.com/c++-faq-lite/const-correctness.html
http://www.possibility.com/Cpp/const.html
@D13_Dreinig

Sheddex

unregistriert

28

19.03.2007, 17:32

Vielen Dank für die Links, ich denke jetzt ist mir einiges klarer. Allerdings werde ich mich an diese Schreibweise wohl erst noch gewöhnen müssen ;)

=> Ist geändert, müsste so jetzt stimmen... hoffe ich^^

29

19.03.2007, 18:08

achja ... beim Beispielprogramm die File-Klasse mit Klassendefinition usw. in das Sourcefile zu setzen halte ich für eine äußerst unordentliche Möglichkeit.
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

30

19.03.2007, 18:17

Zitat von »"DragonFlame"«

Vielen Dank für die Links, ich denke jetzt ist mir einiges klarer. Allerdings werde ich mich an diese Schreibweise wohl erst noch gewöhnen müssen ;)

=> Ist geändert, müsste so jetzt stimmen... hoffe ich^^


Ohja, gefällt mir schon wesentlich besser! :-)
@D13_Dreinig

Werbeanzeige