/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Overloading af << i klasser
Fra : Jesper Gødvad


Dato : 20-05-01 03:35

Hej Alle.

Hvordan kan det være at jeg ikke kan finde ud af at overloade << operatoren
i klasser? Jeg kan godt finde ud af en overloading uden for klassen, men så
kan jeg tilgengæld ikke få adgang til private data.

ostream& operator <<(ostream& outs, MinKlasse& source) {
outs << source.NogetDerErPublic;
return outs;
}

Håber nogen kan hjælpe.

mvh. jesper




 
 
Lau Sennels (20-05-2001)
Kommentar
Fra : Lau Sennels


Dato : 20-05-01 10:21

"Jesper Gødvad" wrote:
>
> Hej Alle.

Hej Jesper.

> Hvordan kan det være at jeg ikke kan finde ud af at overloade << operatoren
> i klasser? Jeg kan godt finde ud af en overloading uden for klassen, men så
> kan jeg tilgengæld ikke få adgang til private data.
>
> ostream& operator <<(ostream& outs, MinKlasse& source) {
> outs << source.NogetDerErPublic;
> return outs;
> }

Problemet er at compileren kun kalder et overloaded
operator-klassemedlem
hvis første argument (og venstresiden af kaldet) er et objekt af klasse-
typen. I dit tilfælde er det et ikke-medlem, et ostream-objekt. For løse
dit problem er du nødt til at lade din overloading-funktion være ikke-
medlem og erklære den friend til din klasse,

// Frit efter C++ Primer

#include<iostream>

class DinKlasse
{
friend ostream& operator <<(ostream&, const DinKlasse&);
...
};

ostream& operator <<(ostream& outs, const DinKlasse& source)
{
..
outs << source;
return outs;
}

Bemærk iøvrigt const erklæringen.

--
Mvh
Lau Sennels

Jesper Gødvad (20-05-2001)
Kommentar
Fra : Jesper Gødvad


Dato : 20-05-01 16:08


> Problemet er at compileren kun kalder et overloaded
> operator-klassemedlem
> hvis første argument (og venstresiden af kaldet) er et objekt af klasse-
> typen. I dit tilfælde er det et ikke-medlem, et ostream-objekt. For løse
> dit problem er du nødt til at lade din overloading-funktion være ikke-
> medlem og erklære den friend til din klasse,

Herligt, det virker nu, tak for hjælpen.

mvh. jesper



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste