Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219

    [C++]Overloading, problema accesso ai campi privati

    Sto progettando una classe Fraction, che deve contenere un numero in formato frazionario.
    Per ora gli ho fatto il calpo value che è un double, ma ho provato a fare l' overloading dell' operatore >> per prendere un valore in input:
    codice:
    #include <iostream>
    
    using namespace std;
    
    class Fraction
    {
        public:
        Fraction();
        Fraction(double value);
        Fraction(float value);
        Fraction(int value);
        void set(double value);
        void set(float value);
        void set(int value);
        double value;
    };
    
    
    Fraction::Fraction()
    {
        value=0.0;
    }
    
    
    Fraction::Fraction(double value)
    {
        this->value=value;
    }
    
    Fraction::Fraction(float value)
    {
        this->value=(double)value;
    }
    
    Fraction::Fraction(int value)
    {
        this->value=(double)value;
    }
    
    void Fraction::set(double value)
    {
        this->value=value;
    }
    
    void Fraction::set(float value)
    {
        this->value=(double)value;
    }
    
    void Fraction::set(int value)
    {
        this->value=(double)value;
    }
    
    istream &operator>> (istream &input, Fraction *f)
    {
        input >> f->value;
        return input;
    }
    
    int main(int argc, char **argv)
    {
        Fraction *f;
        f=new Fraction(4.5);
        cin>>f;
        cout<<f->value<<endl;
        return 0;
    }
    codice:
    istream &operator>> (istream &input, Fraction *f)
    {
        input >> f->value;
        return input;
    }
    Ma il problema è proprio quando vado a fare l' overloding: il campo l' ho messo pubblico perchè altrimenti mi dice che non può accedere a un campo privato.
    Mi chiedo se non c'è un modo di scavalcare questa cosa, come hanno fatto ad esempio con la classe string.Sapete come fare?

  2. #2
    Dovresti dichiarare l'operatore come friend della classe.
    codice:
    class Fraction
    {
        friend istream &operator>> (istream &input, Fraction *f);
        ...
    };
    Comunque, se devi memorizzare una frazione in linea di massima non la memorizzerai come un double, ma come coppia di interi numeratore-denominatore.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.