Salve ragazzi,avrei bisogno di un chiarimento riguardante il polimorfismo a run-time...
ho creato queste linee di codice per utilizzare il polimorfismo a run-time:
#include<stdio.h>
#include <iostream>
#include<string>
#include <stdlib.h>
using namespace std;
class persona{
protected:
char att1[30];
public:
persona(){};
~persona(){};
virtual void compila(char * attributo1){
strcpy(att1, "persona");
}
virtual void get(){
cout << "\natt1:" <<att1 <<"\n";
}
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
class padre: virtual public persona{
protected:
char att2[30];
public:
padre(){};
~padre(){};
void compila(char * attributo1,char * attributo2){
strcpy(att1, attributo1);
strcpy(att2, attributo2);
}
void get(){
cout << "\natt1:" <<att1 <<"\n";
cout << "\natt2:" <<att2 <<"\n";
}
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class madre: virtual public persona{
protected:
char att3[30];
public:
madre(){};
~madre(){};
void compila(char * attributo1,char * attributo3){
strcpy(att1, attributo1);
strcpy(att3, attributo3);
}
void get(){
cout << "\natt1:" <<att1 <<"\n";
cout << "\natt3:" <<att3 <<"\n";
}
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class figlio:public padre,public madre{
public:
figlio(){};
~figlio(){};
void compila(char * attributo1,char * attributo2,char * attributo3){
strcpy(att1, attributo1);
strcpy(att2, attributo2);
strcpy(att3, attributo3);
}
void get(){
cout << "\natt1:" <<att1 <<"\n";
cout << "\natt2:" <<att2 <<"\n";
cout << "\natt3:" <<att3 <<"\n";
}
};
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main(){
int a;
char attributo1[30];
char attributo2[30];
char attributo3[30];
persona *p;
cout << "Immetti dati:\n";
cin >> attributo1;
cin >> attributo2;
cin >> attributo3;
p = new padre;
p->compila(attributo1,attributo2); /*<------errore!*/
p->get();
cin >> a;
return 0;
}
purtroppo però il compilatore mi segnala il seguente errore nel rigo che ho evidenziato:
- error C2660: 'compila' : function does not take 2 parameters
Tale errore fa suporre che il compilatore consideri la funzione compila della classe persona anche se il puntatore p punta ad un oggetto di tipo padre istanziato dinamicamente nella memoria heap.
Come è possibile?
Dove sbaglio?