Oppure

Loading
18/11/09 15:19
matteog
ciao a tutti il mio professore mi ha assegnato un lavoro per casa che consiste nello scrivere in c++ il seguente programma:

creare un classe generale con delle sottoclassi sull'argomento animali mediante l'utilizzo dei concetti di eredità e polimorfismo,ma ho un problema di comprensione infatti mi sono fermato dopo la scrittura della classe animale mi potete spiegare cosa fare e come farlo??


#include "stdafx.h"
#include <iostream>
#include <string>
#using namespace std;
class animale
{
public:
	string specie;
	string descrizione;
	int zampe;
	string abithat;
	string cibo;
       

};
class terresttri:public animale
{
};

class acquatici:public animale
{

};







questo è quello che vorrei fare nn voglio il programma vorrei solo una mano per farlo grazie
mille!!
aaa
18/11/09 17:53
lorenzo
appunto iniziale: togli il # dalla clausola using, si scrive
using namespace std;


per l'ereditarietà e il polimorfismo, ti faccio un piccolo esempio(quello classico) per farti capire...
allora, mettiamo caso che hai una classe mammifero
class mammifero
{
public:
    virtual void tipo()
    {
         std::cout << "mammifero" << std::endl;
    }
};

rapidamente: la classe espone un unico metodo che descrive il tipo di animale rappresentato dall'istanza attiva. Facendo quindi nel main
int main()
{
    mammifero m;
    m.tipo();
    return 0;
}

OUTPUT: mammifero

Adesso, aggiungiamo altre due classi, cane e gatto

class cane: public mammifero
{
public:
   void tipo()
   {
       std::cout << "sono un cane" << std::endl;
   }
};

class gatto: public mammifero
{
public:
   void tipo()
   {
       std::cout << "sono un gatto" << std::endl;
   }
};


ecco, le due classi derivate fanno un overload del metodo della classe base. Questo permette di fare una cosa del genere:
int main()
{
    cane c;
    gatto g;
    c.tipo();
    g.tipo();
    return 0;
}

e avere come OUTPUT:
sono un cane
sono un gatto

tuttavia questo è solo overload delle funzioni membro. La clausola "virtual" che vedi nella classe base però permette anche di fare una cosa così(chiamata appunto polimorfismo)
int main()
{
    mammifero *m;
    cane c;
    m = &c;
    m->tipo();
    return 0;
}

OUTPUT: sono un cane

questo perché, nonostante io stia chiamando il metodo partendo dalla classe base, la key virtual mi salva in memoria un puntatore ad una tabella virtuale che mi tiene conto di che tipo è in realà quel puntatore.
Quindi verrà chiamato il metodo corretto.


Prova a ragionarci su e pensa a come fare il tuo esercizio;)
aaa
18/11/09 18:43
matteog
grazie mille mi sei stato veramente di aiuto ce lò fatta senza problemi sei grande!!:k::k::k:


grazie ancora
aaa