|
| 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
| |
|
|