Dubbi sull'Ereditarietà

di il
2 risposte

Dubbi sull'Ereditarietà

Sto leggendo alcune guide sull'ereditarietà con alcuni esempi di sviluppo delle classiche classi Base e Derivata. Ci sono però alcune cose che non mi sono chiare, come per esempio:

Base.h
#ifndef BASE_H
#define BASE_H
class Base
{
   int b;
public:
   Base(int i=0);
   ~Base();
};
#endif
Base.cpp
#include "Base.h"
#include <iostream>
using namespace std;
Base::Base(int i):b(i)
{
   //bla bla...
}
Base::~Base()
{
   //bla bla...
}
Per quanto riguarda il costruttore nel file Base.cpp, cosa vuol dire quel :b(i) alla fine?

2 Risposte

  • Re: Dubbi sull'Ereditarietà

    Inizializza il valore della variabile d'istanza b a 1.. in pratica equivale ad un
    b = 1;
    . Questa cosa viene utilizzata, ad esempio, per inizializzare delle costanti.
  • Re: Dubbi sull'Ereditarietà

    tuixte ha scritto:


    Inizializza il valore della variabile d'istanza b a 1.. in pratica equivale ad un
    b = 1;
    . Questa cosa viene utilizzata, ad esempio, per inizializzare delle costanti.
    Grazie mille per la risposta. Se posso però avrei altri dubbi sempre sull'ereditarietà. Per esempio, se nella mia classe Base faccio l'overloading dell'operatore << e nella mia classe Derivata voglio modificare leggermente questo operatore (per esempio aggiungendo un stringa all'inizio) senza doverlo riscrivere completamente e quindi ripetermi nel codice, come posso fare? In codice attualmente sono così:

    Base.cpp
    ostream& operator<<(ostream& os, const Base &o)
    {
        os<<"Pippo"<<endl;
        return os;
    }
    
    Derivata.cpp
    [code]ostream& operator<<(ostream& os, const Derivata &o)
    {
        os<<"Pluto"<<endl;
        os<<"Pippo"<<endl;
        return os;
    }
    Come si vede l'uscita "Pippo" si ripete. Non è possibile fare una chiamata all'operatore << della classe Base?
Devi accedere o registrarti per scrivere nel forum
2 risposte