Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
……… Matricola…………
Fondamenti 2 (lettere A-I)
Esonero 1 (Classi e Oggetti, Vettori, Ereditarietà e Polimorfismo)
Prof. M. Angelaccio
1. (10 min.) Nella figura 1 è riportata la definizione di classe Product vista a lezione. class Product
{
1.1. Perché read() non ha l’attributo di const ? public:
Product();
Risposta…………………………………………………………………... void read();
bool is_better_than(Product b) const;
1.2. Fornire un esempio di implementazione per print che stampi in una riga per void print() const;
ciascuno dei campi dell’oggetto Product il suo nome e il suo valore nel private:
formato seguente string name;
“Il prodotto con nome…… ha un indice di qualità (score/price) …../…….” . double price;
int score;
1.3. Fornire un esempio di implementazione per is_better_than che restituisca true se }
l’oggetto corrente ha un indice di qualità maggiore di quello dell’oggetto Figura 1
parametro b.
2. (40 min.) Implementare una classe base Person e derivare le classi Student e Teacher da Person. Una persona ha
nome e età come attributo. Lo studente ha matricola (intero di max 5 cifre) mentre l’insegnante ha uno stipendio.
2.1. Scrivere le definizioni della classe, i costruttori e la funzione membro print() per ciascuna delle classi.
2.2. (retro foglio) Aggiungere una classe Course che contiene oltre al titolo del Corso, l’insegnante del corso e una lista
di studenti registrati al corso. Scrivere la definizione di classe per Course, il costruttore, la funzione membro void
student_registration(name, mat)che inserisce un nuovo studente, la funzione membro print()che
stampa il titolo e i dati di ciascuna delle persone del corso e il numero degli studenti frequentanti, il tutto usando
come implementazione un puntatore a Teacher e un vettore di puntatori a Student.
2.3. (retro foglio) Riscrivere la definizione per Course con un solo vettore di puntatori a Person.
Cognome: ………………………………………………….…… Nome…………………………….……… Matricola…………
Fondamenti 2 (lettere A-I)
Esonero 1 (Classi e Oggetti, Vettori, Ereditarietà e Polimorfismo) (soluzione)
Prof. M. Angelaccio
1. (10 min.) Nella figura 1 è riportata la definizione di classe Product vista a lezione. class Product
{
1.1. Perché read() non ha l’attributo di const ? public:
Product();
Risposta……la funzione read() modifica i campi dell’oggetto(parametro implicito)... void read();
bool is_better_than(Product b) const;
1.2. Fornire un esempio di implementazione per print che stampi in una riga per void print() const;
ciascuno dei i campi dell’oggetto Product il suo nome e il suo valore nel private:
formato seguente string name;
“Il prodotto con nome…… ha un indice di qualità (score/price) …../…….” . double price;
int score;
1.3. Fornire un esempio di implementazione per is_better_than che restituisca true se }
l’oggetto corrente ha un indice di qualità maggiore di quello dell’oggetto Figura 1
parametro b.
bool Product::is_better_than(Product b) const {
void Product::print() const {
if (b.price == 0) return false;
cout << "Il prodotto con nome “ <<name <<”ha un indice di qualità
if (price == 0) return true;
(score/price) “<<score<<” /” << price ;
return score / price > b.score / b.price;
}
}
2. (40 min.) Implementare una classe base Person e derivare le classi Student e Teacher da Person. Una persona ha
nome e età come attributo. Lo studente ha matricola (intero di max 5 cifre) mentre l’insegnante ha uno stipendio.
2.1. Scrivere le definizioni della classe, i costruttori e la funzione membro print() per ciascuna delle classi.
class Person { Person::Person(string n, int a) {
public: name = n;
Person(string n, int a); age = a;
void print() const; }
private: void Person::print() const {
string name; cout << "Person[name=" << name << ",age=" << age << "]";
int age; }
}; Student::Student(string m, int a, long mat): Person(m,a) {
class Student: public Person { matricola = mat;
public: }
Student (string name,int age, long matricola); void Student::print() const{
void print() const; Person:: print();
private: cout << "(and is a Student with matricola="<< matricola << ") \n";
long matricola; }
}; Teacher::Teacher(string m, int a, double sal): Person(m,a) {
class Teacher: public Person { salary = sal;
public: }
Teacher (string name,int age, double salary); void Teacher::print() const {
void print() const; Person:: print();
private: cout << "(and is a Teacher with salary="<< salary << ") \n";
double salary; }
};
2.2. (retro foglio) Aggiungere una classe Course che contiene oltre al titolo del Corso, l’insegnante del corso e una lista
di studenti registrati al corso. Scrivere la definizione di classe per Course, il costruttore, la funzione membro void
student_registration(name, mat)che inserisce un nuovo studente, la funzione membro print()che
stampa il titolo e i dati di ciascuna delle persone del corso e il numero degli studenti frequentanti, il tutto usando
come implementazione un puntatore a Teacher e un vettore di puntatori a Student.
2.3. (retro foglio) Riscrivere la definizione per Course con un solo vettore di puntatori a Person.
Cognome: ………………………………………………….…… Nome…………………………….……… Matricola…………
return 0;
}
2. (40 min.) Implementare una classe base Appointment e derivare la classe Lesson. Un appuntamento ha una
descrizione di tipo string , una data (anno, mese, giorno), e un inizio e fine di tipo Time mentre Lesson considera
anche il luogo dell’appuntamento di tipo String .
2.1. Scrivere le definizioni della classe, i costruttori e la funzione membro print() per ciascuna delle classi.
2.2. (retro foglio) Scrivere una funzione virtuale bool occurs_in(string place) che verifica se l’appuntamento
è nel luogo specificato dal parametro.
2.3. (retro foglio) Scrivere un ambiente di test che inizializza un vettore schedule di puntatori a Appointments e
Lessons , legge un certo luogo e stampa tutti gli appuntamenti.