PDA

Visualizza la versione completa : [C++] Domanda sui puntatori


l.golinelli
03-03-2003, 12:09
Ho questo programmano del quale allego solo in .cpp perchè il .h non è importante:

Versione coi puntatori:



#include <iostream.h>
#include "puntatori.h"

void main()
{
libro *biblio[10];
for(int i=0; i<10; i++)
{
biblio[i] = new (libro);
}
int n, i, tipoop, quale;

// Input dati dei libri

cout << "\nQuanti libri (max 10)? ";
cin >> n;
while(cin.get()!='\n');

n = (n>10 ? 10 : n); //Al massimo 10 libri

for (i=0; i<n; i++)
{
cout << "\nLibro n. " << (i+1) << " ";
biblio[i]->registra();
}

// Gestione prestiti libri

for( ; ; )
{
cout << "\n1 - prestito";
cout << "\n2 - restituzione";
cout << "\n0 - fine";
cout << "\nOperazione ? ";
cin >> tipoop;
if(!tipoop)
break;
cout << "\nQuale libro (1," << n << ")? ";
cin >> quale;
quale = (quale>n ? n : quale); //Al massimo il libro numero 10
quale--; //L'Array va da 0 a 9

biblio[quale]->infoLibro();
if (tipoop==1)
{
if (!biblio[quale]->pEffettuato())
cout << "\nLibro gia' prestato";
else
cout << "\nPrestito effettuato";
}
else
{
if (!biblio[quale]->lRitornato())
cout << "\nLibro gia' presente";
else
cout << "\nRestituzione effettuata";
}
}
}

Versione senza puntatori:



#include <iostream.h>
#include "puntatori.h"

void main()
{
libro biblio[10];
int n, i, tipoop, quale;

// Input dati dei libri

cout << "\nQuanti libri (max 10)? ";
cin >> n;
while(cin.get()!='\n');

n = (n>10 ? 10 : n); //Al massimo 10 libri

for (i=0; i<n; i++)
{
cout << "\nLibro n. " << (i+1) << " ";
biblio[i].registra();
}

// Gestione prestiti libri

for( ; ; )
{
cout << "\n1 - prestito";
cout << "\n2 - restituzione";
cout << "\n0 - fine";
cout << "\nOperazione ? ";
cin >> tipoop;
if(!tipoop)
break;
cout << "\nQuale libro (1," << n << ")? ";
cin >> quale;
quale = (quale>n ? n : quale); //Al massimo il libro numero 10
quale--; //L'Array va da 0 a 9

biblio[quale].infoLibro();
if (tipoop==1)
{
if (!biblio[quale].pEffettuato())
cout << "\nLibro gia' prestato";
else
cout << "\nPrestito effettuato";
}
else
{
if (!biblio[quale].lRitornato())
cout << "\nLibro gia' presente";
else
cout << "\nRestituzione effettuata";
}
}
}

Va bene la versione coi puntatori come l'ho fatta io?

E' più veloce secondo voi nel caso di un programma di più grosse dimensioni?

:ciauz:

l.golinelli
03-03-2003, 20:45
Up ragazzi! Per voi sarà sicuramente facile! :tongue:

TheGreatWorld
03-03-2003, 23:39
Sicuramente la seconda. Fosse solo per tutte le chiamate in meno che devi fare a new, ma anche perche' lavorare sullo stack e' più veloce che lavorare sull'heap.

bye

l.golinelli
04-03-2003, 09:44
Quindi la versione che fa uso dei puntatori alla classe è più lenta...

:eek:

Loading