Buenas amigos..
Tenía entendido que la palabra reservada "friend" permitía acceder a todas mis variables privadas de mi clase desde fuera, es como una excepción a la regla, para friend sería todo publico.
He querido utilizar el operador sobrecargado << para que mi clase pueda ser impresa por la salida estándar.
Esto es lo que tengo:
//Persona.h
#include <iostream>
class Persona{
char * nombre;
int edad;
public:
Persona();
~Persona();
//La siguiente linea da error si no coloco la palabra friend al principio
std::ostream & operator<<(std::ostream & os, Persona & _estaPersona);
char * LeerNombre() const;
int LeerEdad() const;
void InsertarNombre(const char * _nuevoNombre);
void InsertarEdad(const int _nuevaEdad);
};
//Persona.cpp
#include "Persona.h"
using namespace std;
//Sobrecarga operador
ostring & operator<<(ostring & os, const Persona & _estaPersona){
os << "Nombre : " << _estaPersona.LeerNombre() << endl;
os << "Edad : " << _estaPersona.LeerEdad() << endl;
return os;
}
char * Persona::LeerNombre(){
return nombre;
}
int Persona::LeerEdad(){
return edad;
}
void Persona::InsertarNombre(const char * _nuevoNombre){
strcpy(nombre, _nuevoNombre);
}
void Persona::InsertarEdad(const int _nuevaEdad){
edad = _nuevaEdad;
}
//main.cpp
#include Persona.h
int main (){
Persona p;
p.InsertarNombre("ElHacker");
p.Edad(37);
std::cout << p << endl;
}
Lo que no entiendo, es que según la definición de friend, esto no me calza, yo no quiero acceder desde fuera a una propiedad privada, solo estoy intentando acceder a LeerNombre() y LeerEdad() que son publicas, no debería necesitar colocar friend... es que acaso friend con el operador trabaja de forma distinta?
Gracias de antemano.