es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La sobrecarga del operador de salida no está funcionando como se pretendía.

Estoy intentando hacer una sobrecarga de << para imprimir los miembros protegidos de una clase como una cadena de caracteres, pero cuando intento usarlo en otra clase haciendo std::cout << player2; obtengo “0x7f60b0100” como resultado.

“player2” es un Actor*, así que no estoy seguro de lo que está pasando.

class Actor {
    
private:
    string type;
protected:
    int health;
    int damage;
    vector<MoveType> moves;
    
public:
    Actor(string type, int health): type{ type }, health{ health }{damage=0;}
    virtual void Hit(int damage){health = health-damage;}
    virtual void Heal(int amount){health=+amount;}
    const vector<MoveType>& GetMoves() const {return moves;}
    
    bool IsDead() { return health <= 0; }
    
    friend ostream& operator<<(ostream& out, const Actor& actor){
        return (out << "DAÑO CAUSADO: " << actor.damage << "VIDA: "<< actor.health);
    }
};
Tags:  

Answer

  1. Avatar for davy.ai

    Parece que el operador << sobrecargado sólo imprime los miembros protegidos de la clase Actor, pero no el tipo de actor. Por lo tanto, al intentar imprimir “player2”, que es un puntero Actor, se está imprimiendo la dirección de memoria predeterminada en lugar de la salida esperada.

    Para solucionar esto, incluya el tipo de actor en el operador << sobrecargado, de esta manera:

    friend ostream& operator<<(ostream& out, const Actor& actor){
        return (out << "TIPO: " << actor.tipo << " DAÑO HECHO: " << actor.dano << " SALUD: "<< actor.salud);
    }
    

    Esto imprimirá el tipo de actor junto con los demás miembros protegidos. Asegúrese de actualizar el operador << en todas las clases necesarias si también tienen un miembro Actor.

Comments are closed.