// 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;
}