• Non ci sono risultati.

PROGRAMMIAMOC++ - Figure geometriche 2

N/A
N/A
Protected

Academic year: 2021

Condividi "PROGRAMMIAMOC++ - Figure geometriche 2"

Copied!
4
0
0

Testo completo

(1)

Semplici modifiche su un programma ad oggetti

Proseguendo nello studio del programma sulle figure geometriche, supponiamo ora di volerlo modificare per aggiungere la possibilità di calcolare oltre all'area anche il perimetro di rettangolo, cerchio e triangolo. Nel caso della classe rettangoli e cerchi, la modifica è molto semplice poiché basta aggiungere alla classe un nuovo metodo perimetro:

class rettangoli { private:

double l1,l2;

public:

void set() {

cout<<"Primo lato: ";

cin>>l1;

cout<<"Secondo lato: ";

cin>>l2;

}

double area() {

return l1*l2;

}

double perimetro() {

return 2*l1+2*l2;

} };

class cerchi { private:

double r;

public:

void set() {

cout<<"Raggio: ";

cin>>r;

}

PROGRAMMIAMO

C++ - Figure geometriche 2

C++ |Home |Contatti

Programmiamo http://www.programmiamo.altervista.org/C/oop/o...

1 di 4 16/12/2014 09:07

(2)

double area() {

return 3.14159*r*r;

}

double perimetro() {

return 2*3.14159*r;

}

};

Per quanto riguarda i triangoli, il calcolo del perimetro non può essere fatto a partire da base e altezza, ma richiede la conoscenza dei tre lati del triangolo. D'altra parte, fornendo i tre lati del triangolo invece di base e altezza, si presenta il problema di non poter calcolare più l'area con la formula:

Area = 0.5 * base * altezza;

Il problema può essere risolto calcolando l'area con una formula alternativa, detta di Erone, la quale fa uso delle misure dei tre lati a, b e c e del semiperimetro (p/2, uguale alla metà del perimetro) per il calcolo:

Usando tale formula, la classe triangoli può essere così riscritta:

class triangoli { private:

double a,b,c;

public:

void set() {

cout<<"Fornisci le misure dei tre lati: ";

cin>>a;

cin>>b;

cin>>c;

}

double perimetro() {

return a+b+c;

}

double area() {

double sp;

sp = perimetro()/2;

return sqrt(sp*(sp-a)*(sp-b)*(sp-c));

Programmiamo http://www.programmiamo.altervista.org/C/oop/o...

2 di 4 16/12/2014 09:07

(3)

} };

Osserviamo subito che il metodo area() della classe triangoli usa al proprio interno il metodo perimetro() della stessa classe:

double area() {

double sp;

sp = perimetro()/2; //uso di un altro metodo della stessa classe return sqrt(sp*(sp-a)*(sp-b)*(sp-c));

}

Ancora più interessante è forse osservare che, nonostante la classe triangoli sia stata completamente modificata, la struttura del main è praticamente rimasta la stessa (a parte l'aggiunta della chiamata al metodo perimetro):

int main(int argc, char *argv[]) {

rettangoli ret;

triangoli tri;

cerchi cer;

int scelta;

double a,p;

cout<<"Scegli la figura geometrica:\n";

cout<<"1) rettangolo\n2) triangolo\n3)cerchio\n";

cout<<"Scelta? ";

cin>> scelta;

switch (scelta) {

case 1:

ret.set();

a = ret.area();

p = ret.perimetro();

break;

case 2:

tri.set();

a = tri.area();

p = tri.perimetro();

break;

case 3:

cer.set();

a = cer.area();

p = cer.perimetro();

break;

} }

Programmiamo http://www.programmiamo.altervista.org/C/oop/o...

3 di 4 16/12/2014 09:07

(4)

Questo è un importante vantaggio della programmazione ad oggetti: siccome il funzionamento e la struttura interna degli oggetti sono incapsulati dentro gli oggetti stessi e non sono visibili all'esterno, è possibile modificare un oggetto anche profondamente, lasciandone però immutata l'interfaccia verso l'esterno. Ciò in particolare può essere fatto senza dover riscrivere il programma, ma modificando solo la classe.

precedente - successiva Sito realizzato in base al template offerto da

http://www.graphixmania.it

Segui

Segui @ElePrograMania@ElePrograMania

Programmiamo http://www.programmiamo.altervista.org/C/oop/o...

4 di 4 16/12/2014 09:07

Riferimenti

Documenti correlati

 definisce le variabili (memoria privata) ed i metodi (interfaccia) di tali oggetti.  altri punti

 definisce le variabili (memoria privata) ed i metodi (interfaccia) di tali oggetti.  altri punti

public void draw(Window w, Position where){…}. public

La differenza è che nella programmazione procedurale si ragione in termini di sottoprogrammi (main e funzioni) e di dati, considerati come entità separate.. I sottoprogrammi operano

quando viene istanziato da un altro oggetto della stessa classe. l’argomento è una reference ad un

■ La funzione costruttore di un oggetto locale (definito all'interno di una funzione o di un blocco di istruzioni) viene eseguita nel momento in cui viene incontrata l'istruzione

■ Le variabili static sono molto utili per gestire informazioni comuni a tutti gli oggetti di una classe (per esempio possono fornire i dati di default per l'inizializzazione

■ così come una classe è un modello per istanziare oggetti (della classe) a tempo d'esecuzione, un template è un modello per istanziare classi o funzioni (del template) a tempo