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

koschka

Community-Fossil

  • »koschka« ist der Autor dieses Themas

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

1

17.05.2004, 15:43

friend's und überladene Operatoren

Hi,
man kann Operatoren ja überladen. Und diese dann auch als "Freunde" defineiren. Diese machen z.b. bei == und + Sinn. Ich hab aber bis jetzt nur "inline" friend Operatoren gesehen, kann man die nur als inline definieren? In meinem Buch steht dazu nix, im Internet auch nicht, thx.

Kurz und Knapp: Ich möchte also die Freund Operatoren als "echte" Funktionen mit Prototyp und Implementation definieren, NICHT als inline Makro

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

17.05.2004, 18:51

hi

abgesehen davon dass ich sowas noch nie gemacht hab, würd ich rein von der logik her sagen, dass es egal is ob inline oder nicht!?

aber den sinn von einem operator der als friend deklariert is verstehe ich nicht ganz.

afaik kannst du mit friend klassen bzw. funktionen angeben die auch von außen auf private bzw. protected elemente zugreifen können!?

koschka

Community-Fossil

  • »koschka« ist der Autor dieses Themas

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

3

17.05.2004, 21:05

Das Problem mit den "inline" ist ja, das diese Funktionen im Header definiert werden müssen. Damit kann der Benutzer der Klassenschnittstelle Teile vom Code sehen. Das entspricht nicht dem Prinzip, wofür Klassen entwickelt wurden und ist auch "unsauber". "Inline"'s haben aber den Vorteil das man einen leichten Geschwindigkeitsgewinn verzeichnen kann, da diese ja als Makros benutzt werden, und somit direkt in den Code eingfügt, statt nur "verlinkt" zu werden.

Man kann Operatoren auch ohne "friend" deklarieren. Aber damit entsteht folgender Nachteil:

Quellcode

1
2
3
4
5
6
7
8
9
// Klasse für Komplexe Zahlen
complex y, x1, x2;

y = x1 + x2;   //richtig, da y = x1.operator+(x2)

// ABER
y = complex(5.0) + x1;   // falsch
// ODER
y = 5.0 + x2;                  // ebenfalls falsch

falsch, da vom compiler als complex(5.0).operator+ (x1) interpretiert und ein konstander Ausdruck wie complex(5.0) keine Elementfunktionen haben kann

Werbeanzeige