Guida programmazione orientata agli oggetti » Torna alla lezione

Esempio di ereditarietà [C++]

//*********************************
// file contatore.h
//*********************************
class Contatore
{
    public:
        Contatore();
        Contatore(int valoreIniziale);
        int getValoreContatore();
        void incrementaContatore();
    private:
        int valoreContatore;
};

//*********************************
// file contatore.cpp
//*********************************
#include "contatore.h"
Contatore::Contatore()
{
    valoreContatore = 0;
}
Contatore::Contatore(int valoreIniziale)
{
    valoreContatore = valoreIniziale;
}
int Contatore::getValoreContatore()
{
    return valoreContatore;
}
void Contatore::incrementaContatore()
{
    valoreContatore++;
}

//*********************************
// file contatoredoppio.h
//*********************************
#include "contatore.h"
class ContatoreDoppio : public Contatore
{
    public:
        ContatoreDoppio(int valoreIniziale);
        void incrementaContatore();
};

//*********************************
// file contatoredoppio.cpp
//*********************************
#include "contatoredoppio.h"
// Si noti la chiamata al costruttore della classe padre, dopo i due punti
ContatoreDoppio::ContatoreDoppio(int valoreIniziale) : Contatore(valoreIniziale)
{
}
void ContatoreDoppio::incrementaContatore ()
{
    // Viene chiamato il metodo incrementaContatore della classe padre
    // utilizzando lo scope operator ::
    for (int i =0; i < 2; i++)
    {
        Contatore::incrementaContatore();
    }
}

//*********************************
// file main.cpp
//*********************************
#include "contatoredoppio.h"
#include < iostream>
main()
{
    Contatore cont1(3);
    ContatoreDoppio cont2(3);
     cout << cont1.getValue() << endl;
     cout << cont2.getValue() << endl;
     cont1.incrementaContatore();
     cont2.incrementaContatore();
     cout << cont1.getValue() << endl;
     cout << cont2.getValue() << endl;
}