dragonet
2008-11-29 18:19:10 UTC
Salve a tutti, ho iniziato a studiare il polimorfismo, e non capisco una
cosa. Perchè se tento di accedere direttamente con un puntatore ad una
classe il programma si blocca? Se prima dichiaro un'oggetto di quella
classe, poi assegno al puntatore l'indirizzo dell'oggetto, raggiungo i
metodi della classe senza problemi, ma credevo si potesse fare anche
l'operazione che ho descritto prima. Posto i due sorgenti.
Funziona:
#include<iostream>
using namespace std;
class padre
{
public: virtual void chi_sono(); //parola chiave "virtual" metodo virtuale
};
class figlio:public padre
{
public:void chi_sono();
};
main()
{
padre primo; //creo oggetto di classe padre
padre *puntatore; //creo puntatore a oggetto padre
primo.chi_sono(); //chiamo metodo della classe padre: ritorna "sono il
padre"
puntatore=&primo; //passo a puntatore al padre indirizzo del padre
puntatore->chi_sono(); //punto metodo della classe padre: ritorna "sono il
padre"
figlio secondo; //creo oggetto di classe figlio
secondo.chi_sono(); //chiamo metodo della classe figlio: ritorna "sono il
figlio"
puntatore=&secondo; //passo a puntatore al padre indirizzo del figlio
puntatore->chi_sono(); //chiamo metodo della classe figlio: ritorna "sono
il figlio"
cin.get();
}
void padre::chi_sono()
{
cout<<"\n\nsono il padre";
}
void figlio::chi_sono()
{
cout<<"\n\nsono il figlio";
}
si blocca:
#include<iostream>
using namespace std;
typedef class padre
{
public: virtual void chi_sono(); //parola chiave "virtual" metodo virtuale
};
class figlio:public padre
{
public:
void chi_sono();
int a;
};
main()
{
figlio *puntatore;
puntatore->chi_sono();
cin.get();
}
void padre::chi_sono()
{
cout<<"\n\nsono il padre";
}
void figlio::chi_sono()
{
cout<<"\n\nsono il figlio";
}
Grazie a tutti in anticipo.
cosa. Perchè se tento di accedere direttamente con un puntatore ad una
classe il programma si blocca? Se prima dichiaro un'oggetto di quella
classe, poi assegno al puntatore l'indirizzo dell'oggetto, raggiungo i
metodi della classe senza problemi, ma credevo si potesse fare anche
l'operazione che ho descritto prima. Posto i due sorgenti.
Funziona:
#include<iostream>
using namespace std;
class padre
{
public: virtual void chi_sono(); //parola chiave "virtual" metodo virtuale
};
class figlio:public padre
{
public:void chi_sono();
};
main()
{
padre primo; //creo oggetto di classe padre
padre *puntatore; //creo puntatore a oggetto padre
primo.chi_sono(); //chiamo metodo della classe padre: ritorna "sono il
padre"
puntatore=&primo; //passo a puntatore al padre indirizzo del padre
puntatore->chi_sono(); //punto metodo della classe padre: ritorna "sono il
padre"
figlio secondo; //creo oggetto di classe figlio
secondo.chi_sono(); //chiamo metodo della classe figlio: ritorna "sono il
figlio"
puntatore=&secondo; //passo a puntatore al padre indirizzo del figlio
puntatore->chi_sono(); //chiamo metodo della classe figlio: ritorna "sono
il figlio"
cin.get();
}
void padre::chi_sono()
{
cout<<"\n\nsono il padre";
}
void figlio::chi_sono()
{
cout<<"\n\nsono il figlio";
}
si blocca:
#include<iostream>
using namespace std;
typedef class padre
{
public: virtual void chi_sono(); //parola chiave "virtual" metodo virtuale
};
class figlio:public padre
{
public:
void chi_sono();
int a;
};
main()
{
figlio *puntatore;
puntatore->chi_sono();
cin.get();
}
void padre::chi_sono()
{
cout<<"\n\nsono il padre";
}
void figlio::chi_sono()
{
cout<<"\n\nsono il figlio";
}
Grazie a tutti in anticipo.