Concetti Chiave
- La classe frazione consente di effettuare operazioni aritmetiche tra numeri razionali attraverso funzioni friend.
- Le funzioni friend, come somma, differenza, prodotto e quoziente, hanno accesso ai membri privati della classe frazione.
- Il costruttore di default e il costruttore generico permettono di creare oggetti frazione con numeratore e denominatore.
- La funzione riduci() semplifica la frazione dividendo numeratore e denominatore per il loro massimo comune divisore (MCD).
- È necessario implementare sia la classe frazione che un programma di test per verificarne il corretto funzionamento.
Scrivere un pgn C++ che consenta di effettuare le quattro operazioni aritmetiche tra i numeri razionali, utilizzando una classe frazione opportunamente costruita.
Dopo un’accurata analisi si perviene alla seguente dichiarazione della classe frazione:
class frazione{
friend frazione somma (const frazione & a, const frazione & b);
friend frazione differenza (const frazione & a, const frazione & b);
friend frazione prodotto (const frazione & a, const frazione & b);
friend frazione quoziente (const frazione & a, const frazione & b);
public:
frazione(); //costruttore di default
frazione(int num, unsigned int den =1); //costruttore generico
void ricevi(); //input
void comunica(); //output
private:
void riduci(); //funzione di servizio
long num; //numeratore
unsigned long den; //denominatore > 0
};
Osservazioni:
Che cosa sono le funzioni friend?
Le funzioni friend sono funzioni che, pur non appartenendo alla classe, hanno libero accesso a tutti i campi
(anche a quelli privati) della classe stessa.
Es.
friend frazione somma (const frazione & a, const frazione & b);
Questa funzione prende in input due oggetti di tipo frazione e ritorna, per valore, un oggetto di tipo frazione che
rappresenta la somma dei due oggetti (a e b) di input.
Implementazione (delle funzioni friend):
Non si indica né la parola chiave friend, né il riferimento alla classe.
frazione somma (const frazione & a, const frazione & b)
{
…..
}
Il metodo privato riduci() “semplifica” un oggetto di tipo frazione.
Ti ricordo che per ridurre ai minimi termini una frazione occorre dividere numeratore e denominatore per il loro massimo comun divisore. La funzione riduci() utilizza una funzione ricorsiva mcd() per il calcolo del MCD.
a) implementa in C++ la classe frazione;
b) costruisci un semplice pgm C++ per provare la classe frazione.
Domande da interrogazione
- Qual è lo scopo delle funzioni friend nella classe frazione?
- Come viene semplificata una frazione nella classe frazione?
- Quali costruttori sono definiti nella classe frazione e qual è la loro funzione?
Le funzioni friend, pur non appartenendo alla classe, hanno accesso a tutti i campi della classe, inclusi quelli privati. Questo permette loro di operare direttamente sugli oggetti della classe frazione, come nel caso delle operazioni aritmetiche tra frazioni.
La semplificazione di una frazione avviene tramite il metodo privato riduci(), che divide numeratore e denominatore per il loro massimo comun divisore (MCD), calcolato utilizzando una funzione ricorsiva mcd().
La classe frazione definisce un costruttore di default e un costruttore generico. Il costruttore di default inizializza una frazione senza parametri, mentre il costruttore generico permette di specificare numeratore e denominatore, con un valore predefinito di 1 per il denominatore.