friend operator overloading

Tags:    c++

Hej! :)

Hvordan virker denne kode som bruger
friend operator overstyring? Og det er
ikke mig der har skrevet koden. Har kopieret
den fra Henrik Tange's bog jeg har
kun lige lavet nogle mellemrum for
at lette forklaringen

Fold kodeboks ind/udKode 



Tak!



Indlæg senest redigeret d. 14.05.2010 07:56 af Bruger #15732
7 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Når du har et udtryk som:
x = y + z;
er det typen på y der bestemmer hvilken operator der bliver kaldt. Hvis y og x er af type A og A har en + operatort vil den blive kaldt.
Hvis y er af typen float vil den forsøge at bruge en af de indbyggede + operatorer.
I dit tilfælde vil det gå galt i linien:
Kasse enFjerdeVare = 130.0 + enAndenVare;

For der er ikke nogen + operator til double der matcher med en højreside af typen Kasse.
Du kan få det til at virke ved at lave det om til:
Kasse enFjerdeVare = Kasse(130.0) + enAndenVare;
Så vil den oprette et midlertidigt objekt og kalde det objekts + operator


Det er korrekt, men du KAN også overstyre floats + operator:
Fold kodeboks ind/udKode 




Altså du vil vide hvad er friend kan? En friend er ikke en del af "del" af klassen. Det er faktisk bare en almindelig funktion, men det specielle er at den har lov til at røre ved klassens private variabler, som du også kan se i dit eksempel. Den udskriver en fPris. Dette kunne en almindelig funktion ikke gøre.



Martin Slot tak!

Jeg glemte et plus i ovenståne kode.
Kan du forklare lidt om hvad der sker?
Og hvorfor duer denne kode ikke:


Fold kodeboks ind/udKode 


Hvorfor bliver floats + operator ikke kaldt
i første tilfælde?
Og hvordan kan det være at når man har
en friend operator+ at float + Kasse
duer?

Tak!



Indlæg senest redigeret d. 14.05.2010 08:01 af Bruger #15732
Altså du vil vide hvad er friend kan? En friend er ikke en del af "del" af klassen. Det er faktisk bare en almindelig funktion, men det specielle er at den har lov til at røre ved klassens private variabler, som du også kan se i dit eksempel. Den udskriver en fPris. Dette kunne en almindelig funktion ikke gøre.


En klasse kan også være friend...ikke kun funktioner.



Vil stadig gerne have hjælp til det jeg har
skrevet i mine 2 kommentarer.

Tak!



Når du har et udtryk som:
x = y + z;
er det typen på y der bestemmer hvilken operator der bliver kaldt. Hvis y og x er af type A og A har en + operatort vil den blive kaldt.
Hvis y er af typen float vil den forsøge at bruge en af de indbyggede + operatorer.
I dit tilfælde vil det gå galt i linien:
Kasse enFjerdeVare = 130.0 + enAndenVare;

For der er ikke nogen + operator til double der matcher med en højreside af typen Kasse.
Du kan få det til at virke ved at lave det om til:
Kasse enFjerdeVare = Kasse(130.0) + enAndenVare;
Så vil den oprette et midlertidigt objekt og kalde det objekts + operator



Tak for svarene Robert og Bertel



t