// ereditarieta1.cpp
//
// Esempio di reimpiego di codice basato sull'ereditarieta' delle classi.
#include <iostream>
#include <cstring>
using namespace std;
class Persona {
private:
char *nome;
char *cognome;
public:
Persona(const char *n, const char *c);
~Persona();
char* get_nome() {return nome;}
char* get_cognome() {return cognome;}
void stampa();
};
class Studente : public Persona {
private:
int matricola;
public:
Studente(const char *n, const char *c, int m);
int get_matricola() { return matricola; }
void stampa();
};
Persona::Persona(const char *n, const char *c) {
nome = new char[strlen(n)+1];
strcpy(nome, n);
cognome = new char[strlen(c)+1];
strcpy(cognome, c);
}
Persona::~Persona() {
clog << "Rilascio delle risorse allocate per " << nome << " " << cognome << endl;
delete[] nome;
delete[] cognome;
}
void Persona::stampa() {
cout << "Nome: " << nome << endl;
cout << "Cognome: " << cognome << endl;
}
Studente::Studente(const char *n, const char *c, int m) :
Persona(n, c), matricola(m) {}
void Studente::stampa() {
Persona::stampa();
cout << "Matricola: " << matricola << endl;
}
int main() {
Persona p("Mario", "Rossi");
Studente s("Carla", "Bianchi", 12345);
p.stampa();
s.stampa();
if (strcmp(p.get_nome(), s.get_nome()) == 0 && strcmp(p.get_cognome(), s.get_cognome()) == 0)
cout << "Le due persone sono omonime." << endl;
else
cout << "Le due persone non sono omonime." << endl;
cout << "Fine del programma..." << endl;
return 0;
}