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

1

08.07.2007, 14:05

casting nach d3dvector&

Hi,

ich hätte da eine Frage zu dem Buch:

"operator" wird ja zur Neudefinierung von Operatoren gebraucht. Auf S.57 wird das Wort aber mit einer ganz anderen Syntax verwendet.

Aus der Doku:

Zitat

type operator operator-symbol ( parameter-list )


Aus dem Buch:

C-/C++-Quelltext

1
2
3
4
operator D3DVECTOR&()
{
return *((D3DVECTOR*)(this));
}



? Kann mich dahingehend einer Aufklären?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

08.07.2007, 14:10

Re: casting nach d3dvector&

Zitat von »"Shoot"«

"operator" wird ja zur Neudefinierung von Operatoren gebraucht. Auf S.57 wird das Wort aber mit einer ganz anderen Syntax verwendet.


ich versteh nicht ganz was du damit sagen willst...

Zitat von »"Shoot"«


C-/C++-Quelltext

1
2
3
4
operator D3DVECTOR&()
{
return *((D3DVECTOR*)(this));
}



? Kann mich dahingehend einer Aufklären?


naja, das ist eine (mehr oder weniger gute) methode um objekte einer klasse x in D3DVECTOR objekte zu casten. der this pointer wird umgewandelt in einen pointer vom typ D3DVECTOR* und dieser pointer dann dereferenziert. was man damit erreicht ist, dass man dem compiler weißmacht das objekt wäre ein D3DVECTOR.

3

08.07.2007, 15:27

Hi dot,

danke für die schnelle Antwort.
Gut, mit Neudefinierung war ich etwas unpräzise, Überladung hätte es besser getroffen. In der VS-Doku steht dann ja frei übersetzt, das man mit der operator-Funktion Operatoren in einer Klasse neu definiert werden können.

Die Syntax ist ja dann :
type operator operator-symbol ( parameter-list )

Bei der Methode zum casten vom d3dvector würde ja nach dieser Syntax der Type fehlen und D3DVECTOR ist ja auch kein Operator und von daher kann ich den auch nicht überladen. Eine andere Nutzung des operator-Keywords ist mir nicht bekannt.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

08.07.2007, 15:55

Der Schlüsselwort operator wird überall da verwendet wenn ein Operator überladen werden soll, z.B.:

C-/C++-Quelltext

1
foo& operator+=( const foo& );


Und diese Konvertierungoperatoren sind ganz unschöne Lösungen. Da wär eine Methode viel schöner:

C-/C++-Quelltext

1
2
3
4
D3DVECTOR& to_d3dvector()
{
  return *( ( D3DVECTOR* )&x );
}


Vorausgesetzt deine Struktur hat eine Membervariable x und diese ist die erste Komponente. Den this-Pointer rumzucasten ist ohnehin keine gute Idee.
@D13_Dreinig

5

08.07.2007, 16:52

Hi David,

danke für deine Antwort. Ob dieser Operator gut oder schlecht ist sei mal dahingestellt, primär geht es mir darum in welchem Zusammenhang man das operator-keyword noch verwenden kann.

Bisher kenn ich nur die Verwendung in der vorhin beschriebenen Syntax


C-/C++-Quelltext

1
type operator operator-symbol ( parameter-list ) 


Der Konvertieroperator scheint aber einer anderen Syntax zu folgen. Deswegen frage ich mich was für weitere Verwendungsmöglichkeiten es mit dem operator-keyword gibt.


Dann wirft deine Antwort noch eine andere Frage auf:
Die Verwendung des &-Operators kenn ich nur vorne rangestellt für die Ausgabe einer Adresse und für die Deklaration von Referenzen. Wonach müßte ich Suchen um mich über die Funktionsweise eines hinten-angestellten &-Operators schlau zu machen?

Dangee schööön

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

08.07.2007, 19:05

Zitat von »"Shoot"«

Der Konvertieroperator scheint aber einer anderen Syntax zu folgen. Deswegen frage ich mich was für weitere Verwendungsmöglichkeiten es mit dem operator-keyword gibt.


ein konvertierungsoperator hat keinen rückgabewert, weil der rückgabewert ja sowieso durch den namen der funktion bestimmt ist.

C-/C++-Quelltext

1
int operator float*();


:roll: würde net viel sinn machen...

C-/C++-Quelltext

1
operator D3DVECTOR&();


das deklariert einen umwandlungsoperator nach D3DVECTOR&, also in den typ "referenz auf D3DVECTOR".

es gibt ansonsten keine anderen verwendungen des operator keywords.

Zitat von »"Shoot"«

Dann wirft deine Antwort noch eine andere Frage auf:
Die Verwendung des &-Operators kenn ich nur vorne rangestellt für die Ausgabe einer Adresse und für die Deklaration von Referenzen. Wonach müßte ich Suchen um mich über die Funktionsweise eines hinten-angestellten &-Operators schlau zu machen?


C-/C++-Quelltext

1
2
3
int& a;
int & a;
int &a;


das ist alles das gleiche. der & operator hat, außer den von dir bereits genannten, nur noch die funktion als binäre UND verknüpfung inne.

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

7

08.07.2007, 19:49

mit dem & operator kann man aber auch auf die adresse eines speicherbereisch(korrekt ausgedrück!) zugreifen.

Beispiel:

C-/C++-Quelltext

1
2
int i;
int *p = &i;



Socke

8

08.07.2007, 20:07

Ah, ok vielen Dank.

bzgl. des operatoren muß ich dann weiterschauen warum er fehlerhaft ist.

bzgl. des Adressoperators:
im vorigen buch c++ für .... wird ja noch explizit drauf hingewiesen, daß es der lesbarkeit dient wenn der Operator direkt hinter der Variablen steht. Deswegen ging ich davon aus, das daß im "Nachfolger" genauso gehandhabt wird.

Vielen Dank euch allen

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

09.07.2007, 10:11

Zitat von »"Shoot"«

bzgl. des Adressoperators:
im vorigen buch c++ für .... wird ja noch explizit drauf hingewiesen, daß es der lesbarkeit dient wenn der Operator direkt hinter der Variablen steht. Deswegen ging ich davon aus, das daß im "Nachfolger" genauso gehandhabt wird.


int& x; oder int &x;...das ist geschmackssache. einige leute schreiben auch int & x;. mir sind keine gründe bekannt die klar für das eine oder andere sprechen würden. ich persönlich bevorzuge die int& x; variante weil sie klarer ausdrückt, dass das & zum typ gehört (btw. dabei handelt es eigentlich nicht nicht um den Adressoperator ;) )

davids und heikos buch haben afaik nicht viel miteinander zu tun (bezüglich "Nachfolger"). davids buch gibts nämlich schon 1 jahr länger als heikos...

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

10

09.07.2007, 11:09

Bei der Schreibweise muss man halt immer dran denken, wo das & dazu gehört...

C-/C++-Quelltext

1
2
int var=5;
int& x=var, y=var;

Hier ist nur x eine Referenz auf var, y enthält eine Kopie von var - also 5. Indem man das & direkt hinter das int schreibt erweckt man eher mal den Eindruck, dass alle Variablen dahinter Referenzen werden...

Werbeanzeige