Newsgroup: it.comp.lang.c++
Titolo: Classi: un semplice dubbio

Quello che voglio fare č implementare una classe per la gestione di una
rubrica;
Se non volessi usare le classi adopererei sicuramente un struct che contiene
dei campi (Nome, cognome, indirizzo)e delle procedure che la
gestiscono!Nell'usare le classi sorge un dubbio : Mi conviene definire
nell'area private un tipo Record e fare in modo che i metodi lavorino sul
record o definire nell'area private le componenti di questo record e fare
poi in modo che i metodi lavorino su queste componenti anche se poi i
"prototipi" dei miei metodi avrebbero un corpo molto esteso?
Meglio Cosi?
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-----------
#include <iostream.h>
#include <stdio.h>
#include <string.h>
class rubrica{
     private :
       char* nome;
       char* cognome;
       char* numtel;
       bool flag;
     public :
       rubrica( );
       bool inserisci()const{return trovato;};
       void stampa_A_video();
       void stampa_su_file();
       bool elimina()const{return trovato;};
}
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-----------
O cosě?
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-----------
#include <iostream.h>
#include <stdio.h>
#include <string.h>
class rubrica{
     private :
      struct rubrica{
         char* nome;
         char* cognome;
         char* numtel;
         bool flag;
       }
       rubrica * R;
     public :
       rubrica(const char* NOME = "", const char* COGNOME = "", const char*
INDIRIZZO = "");
       bool inserisci()const{return trovato;};
       void stampa_A_video();
       void stampa_su_file();
       bool elimina()const{return trovato;};
}
----------------------------------------------------------------------------
----------------------------------------------------------------------------
-----------
Altrimenti accetto suggerimenti!

 Altrimenti accetto suggerimenti!
Primo suggerimento:
- ti consiglio di usare string, vector, list e gli algoritmi della STL che
ti faranno risparmiare mucchietti di tempo su cose che poi riuserai spesso
evitando nello stesso tempo di impelagarti su char* e allocazioni e
deallocazioni dinamiche della memoria che verranno gestite automaticamente
fin quando e' possibile.
Secondo suggerimento:
- come ti ho gia' scritto prima, la necessita' di raggruppare un numero di
dati della tua classe in una sottostruttura, dipende dall'uso che vuoi
farne.
Ricordati inoltre che i costruttori delle classi accettano anche liste di
inizializzazione.
Maurus

 > O così?


 una lista dinamica?
Innanzitutto ti consiglio di stare attento a come quoti, altrimenti posti
messaggi chilometrici e ingarbugliati.
La parte del messaggio (non necessariamente tutto!) a cui si risponde va
sopra e sotto va il tuo nuovo messaggio di replica.
E poi, l'esame che tu farai richiede un progetto in C++ ?
Nel qual caso puoi ampiamente fare uso della STL e quindi di vector, string,
list, queue e algoritmi vari.
Poi quando ti servono puoi usare le new e le delete per le (de)allocazioni
dinamiche di memoria.
Se invece ti si richiede esplicitamente di implementare la rubrica senza
liste gia' preconfezionate, allora devi implementare la tua lista,
certamente in modo dinamico, dato che una rubrica per sua natura non puo'
essere allocata staticamente, amici, conoscenti e ragazze vanno e vengono
nelle rubriche!
Dovresti quindi prevedere un ordinamento della tua lista, per implementare
al meglio inserimento, modifica, cancellazione, stampa in ordine alfabetico
e volendo anche l'aggiunta di un'altra rubrica alla tua rubrica con un bel
mergesort.
Maurus
Maurus

 nelle rubriche!
L'esame che io farò richiede un progetto in c++ e generalmente non è
consentito l'uso di algoritmi o funzioni gia scritti da qualcun altro tranne
piccole eccezioni specificate dai docenti!!!
Per quanto riguarda le allocazioni e le deallocazioni dinamiche gia
sapevo!!!
quindi come sempre dovro scrivere tutte le mie funzioncine e metodi!
Ti ringrazio 1)  per avermi fato capire come vanno date le risposte, non ero
a conoscenza di questa convenzione che un po avevo intuito!
2)per l'aiuto e i consigli che mi offri!


Di nulla, poi posta pure qua i tuoi progressi nel codice piu C++ che ti e'
consentito fare.
Maurus

dei campi (Nome, cognome, indirizzo)e delle procedure che la
[cut]
Solo una domanda! Poli?
Comunque io lo farei cosě:
template <class C>
class MiaLista
{
private:
	struct lista
	{
		C elm;
		lista *next;
		lista *prec;
	};
	lista *ptr;
public:
	MiaLista();
	~MiaLista();
	//qui ci metti tutte le implementazioni che vuoi
	void Aggiungi(const C& elm);
	void Rimuovi(int i);
	C& DammiElemento(int i) const;
	void Stampa(void);
	void Salva(const char* nomefile);
	void Ordina(void);
	//
};
class Contatto{
private:
	char *nome;
	char *cognome;
	char *numerotelefono;
	//ecc...
public:
	Contatto(char* nome, ecc...);
	~Contatto();
	//Molto importatnti a questo punto per l'ordinamento sono i
	//seguenti
	bool operator<(const Contatto&) const;
	bool operator<=(const Contatto&) const;
	bool operator>(const Contatto&) const;
	bool operator>=(const Contatto&) const;
	//E per l'I/O
	void Stampa(void);
	void Salva(void);
	//Ecc, ecc...
};
a questo punto:
typedef Agenda MiaLista<Contatto>
void main(void)
{
	Agenda ag;
	//fai e via!
}
Penso che iostream e compagnia bella te le lascino usare quindi se ci
pensi bene i metodi Salva e Stampa possono essere raggruppati un un
unico operatore overloadato (si puň dire cosi???!!!???).
Ciao Stefano.