Originariamente inviato da lucagiuliodori8
Si effettivamente anche io avevo pensato di usare un vettore di double ma poi la necessità di usare uno stream è nata dal fatto che potrei non conoscere la lunghezza e il tipo di dati in ingresso.
Se è per questo a un vector si possono aggiungere elementi tramite una pusk_back, quindi la lunghezza non è un problema. Il tipo di dati, hai detto che devono essere double quindi non vedo il problema.

In ogni caso come potrei implementare:
ostream << classe_componente;
istream >> classe_componente;
Hai due strade:
la prima e più semplice è definire la coppia di operatori per ogni singola classe.
codice:
   class Componente {
       public:
       friend std::ostream& operator<<(std::ostream& os, const Componente& comp) {
           // qui si ha accesso a ogni dato privato.
       }

       friend std::istream& operator>>(std::istream& os, Componente& comp) {
           // qui si ha accesso a ogni dato privato.
       }
     
   };
La seconda prevede lo stesso schema, ma solo nella classe base e l'accesso alle classi derivate avviene attraverso una o più funzioni virtuali.
codice:
   class ComponenteBase {
       public:
       friend std::ostream& operator<<(std::ostream& os, const ComponenteBase & comp) {
          // qui si ha accesso a ogni dato privato.
          os << comp.get_internal_data();
          return os;
       }

       friend std::istream& operator>>(std::istream& os, ComponenteBase & comp) {
           // qui si ha accesso a ogni dato privato.
       }
       private:
           virtual double& get_internal_data(); 
   };
Una spiegazione più dettagliata (in inglese) la trovi a:
http://www.parashift.com/c++-faq-lite/input-output.html
[15.8] e seguenti