Opeator overloading.....

Tags:    c++

Jg har en klasse der ser sådan ud:

Fold kodeboks ind/udKode 


Som de fleste nok kan regne ud er det en streng "type" jeg prøver lave... men jeg kunne godt tænke mig at bruge den sammen cout således at når jeg i min kode skriver:

Streng a = "Hej med dig!";

og gerne vil printe det på skærmen er jeg nød til at bruge cout << a.ShowStr();

Nu kunne jeg jo godt tænke mig at kunne bruge streng som jeg bruger andre stringtyper ved at skrive: cout << a;

Jeg tænkte at det var muligt at lave et operator overload i min klasse med denne operator <<

Men jeg kan ikke få det til at lade sig gøre... Har prøvet nogle forskellige erklæringer men det vil ikke virke som jeg gerne vil have det til og jeg har søgt ret længe på nettet efter en løsning men kan ikke finde den...

Så tænkte på om nogle af jer hajer herinde kunne hjælpe mig med at få erklæret min operator overstyring...





Jeg ved ikke om det er muligt, men jeg kan se at << operatoren for ostream er defineret for en streambuf klasse. Kan du ikke nedarve din Streng klasse fra den og på den måde udskrive til en ostream?



Ved ikke lige om det kan lade sig gøre da jeg er meget ny i C/C++ verden men vil da lige kigge på det...

Spørgsmålet er nok mere om det er nødvendigt???



Smid følgende i bunden af din header fil:
Fold kodeboks ind/udKode 


..og implementér den således:
Fold kodeboks ind/udKode 


Det burde gøre det.



Tak for hjælp selvom det kke var til meget...

.... for jeg kan heller ikke få dit forslag til at virke overhovedet på nogen måde... Mener det er muligt der er en fejl i din erklæring...

Jeg graver lige lidt mere på nettet... Det skal lade sig gøre, det burde det...
Men hvad jeg er også helt grøn, rom blev jo ikke bygget på uge.



Fold kodeboks ind/udKode 




Tak for hjælpen Robert...

Men jeg har lige lidt yderligere spørgsmål ang. denne operator over load...

jeg kan sagtens få Roberts eksempel til at virke, endvidere med en lille ændring:

Jeg fjerner ShowStr funktionen og tilføjer en friend funktion der bevirker jeg kan få direkte adgang til de private variabler i klassen.

Er som følger: Str.h

Fold kodeboks ind/udKode 


Oventående kode virker fint, lige efter bogen.

Så har jeg min egen Str.h hvor jeg har tilføjet mit operator overload << til klassen ligesom eksemplet ovenfor...

Str.h
Fold kodeboks ind/udKode 



Men det virker ikke og jeg forstår det ikke for jeg syntes jeg har implementeret det ligesom det er implementeret i i eksemplet ovenfor dette.

Jeg har også prøvet at lege med at have selve definitionen til operator overload i min Str.cpp men det giver også knuder...

ER jeg bare dum og blind så jeg ikke kan se en syntax fejl eller hvad er der i vejen???

Hvis i er interesseret i hele koden så mail mig på kent.s.olsen@live.dk eller tilføj mig til MSN via restless@live.dk.

Jeg sender gerne mine filer så i kan se på det samlet.




Indlæg senest redigeret d. 07.09.2008 11:59 af Bruger #14086
Hvad siger compileren ?
Post bare hele koden til Str.h og Str.cpp.



Str.h:
Fold kodeboks ind/udKode 


Str.cpp:
Fold kodeboks ind/udKode 


main.cpp:
Fold kodeboks ind/udKode 


Jeg laver et include i main.cpp til iostream før jeg inkluderer Str.h.... Sådan at den skulle være istand til at kende ostream klassen uden at inkludere den i str.h



Jeg fjernede din '#define NULL 0' fra Str.h og inkluderede <iostream> i Str.cpp, så fik jeg følgende:

Fold kodeboks ind/udKode 




Taxi... Havde set mig blind på det men nu virker det som det skal.



t