|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Aug 2015
Messaggi: 5
|
C++ Liste problema
Ciao ragazzi, sto iniziando a studiare le liste. Solo che ancora non riesco a capirle bene, anzi non le comprendo proprio
![]() ![]() |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Aug 2015
Messaggi: 85
|
Ma hai già creato le classi di liste? O puoi utilizzare qualche libreria?
![]() |
![]() |
![]() |
![]() |
#3 | |
Bannato
Iscritto dal: Nov 2014
Messaggi: 292
|
Quote:
Per l'esattezza esiste un caso in cui "class" non è intercambiabile con "struct" ma si tratta di template e probabilmente non ha nulla a che vedere con ciò che serve a te. In generale io, che sono per i PODO (plain old data objects), consiglio sempre di evitare la keyword "class" e usare le "struct" per definire i tipi aggregati e "typename" per parametrizzare i template con variabili di tipo. Il codice C++ che scrivo non contiene mai la parola "class". |
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Oct 2010
Messaggi: 52
|
Ma scusa, in questo modo non usi la potenzialità dell'OOP, (quindi no costruttori, metodi, distruttori, ereditarietà ecc...), credo che l'autore del topic debba svolgere l'esercizio utilizzando l'OOP e non la programmazione strutturata del C classico.
Premetto che parlo da semi-profano perchè non uso il C e tantomeno il C++ da un bel pò di tempo, quindi potrei aver scritto boiate. |
![]() |
![]() |
![]() |
#5 |
Junior Member
Iscritto dal: Aug 2015
Messaggi: 5
|
Non devo programmare con le struct, poichè devo programmare in OOP
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Oct 2010
Messaggi: 52
|
ValeLL94, per andare avanti devi metterci del tuo, nessuno ti darà l'esercizio svolto.
Quindi scrivi quello sai fare e poi vedrò di darti una mano (per quello che mi ricordo) ![]() |
![]() |
![]() |
![]() |
#7 |
Junior Member
Iscritto dal: Aug 2015
Messaggi: 5
|
Il problema è che non so strutturare bene il programma perchè non ho capito come creare la lista.
|
![]() |
![]() |
![]() |
#8 |
Junior Member
Iscritto dal: Aug 2015
Messaggi: 5
|
Vediamo cosa riesco a fare
|
![]() |
![]() |
![]() |
#9 |
Junior Member
Iscritto dal: Aug 2015
Messaggi: 5
|
Codice:
#include<iostream> #include<cstring> using namespace std; class nodo{ public: int value; nodo *next; }; class lista{ private: int var; public: lista(); void inserimento(); void visualizza(); void setvar(int); void getvar(); }; int main(){ nodo *lista=NULL; // puntatore della lista lista->inserimento(); //crea la lista lista->visualizza(); //stampa lista } Io vorrei fare solo l'inserimento e la stampa della lista. Fino a qui è giusto ? |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Oct 2010
Messaggi: 52
|
Bene, intanto avrai studiato che in C++ quando crei una classe devi dichiarare un costruttore ed un distruttore, poi il metodo inserimento cosa fa di preciso, crea ogni elemento della lista?
Perchè dentro "nodo" hai messo int value e dentro "lista" int var? Nel main per come l'hai scritto per ora vedo errori, perchè l'oggetto di tipo nodo non ha i metodi inserimento e visualizza, senza contare che non è allocato. |
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Oct 2010
Messaggi: 52
|
Si, costruttore e distruttore non sono obbligatori, ma pensavo di fargli fare l'assegnazione a null del puntatore nel costruttore e la deallocazione della memoria nel distruttore.
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Istanziare lista a NULL e poi utilizzarla ti porta diretto ad un crash del programma.
Cosa servono i metodi setvar e getvar? Generalmente una lista non si autopopola, ma è un contenitore a cui qualcuno passa dei dati, per cui al metodo inserimento almeno dovresti passare qualcosa come parametro. Il metodo dovrebbe essere qualcosa tipo: Codice:
void inserimento(oggettoDiQualcheTipo * data); Poi un'interfaccia utile per la lista potrebbe essere costituita anche da un metodo per l'accesso diretto agli elementi e un metodo che ritorna la dimensione della lista, avanzando un altro po' ci sarebbe la gestione degli iteratori, ma lasciamo perdere per il momento. Quanto alla visualizzazione è meglio che non sia la lista stessa a visualizzarsi, con l'accesso ai singoli elementi e alla dimensione chiunque può stampare il contenuto della lista nella maniera opportuna (su standard output, su file, ecc...). Ovviamente questo solo a livello di interfaccia, la scrittura del codice dei vari metodi spetta a te. |
![]() |
![]() |
![]() |
#13 | |
Bannato
Iscritto dal: Nov 2014
Messaggi: 292
|
Quote:
Ripeto, le keyword "class" e "struct" in C++ sono completamente intercambiabili salvo la visibilità predefinita dei membri, che è pubblica nel caso delle struct e privata nel caso delle classi. Usare classi al posto delle struct in C++ non è in alcun modo prerogativa della programmazione orientata agli oggetti. Ultima modifica di 71106 : 02-09-2015 alle 12:50. |
|
![]() |
![]() |
![]() |
#14 |
Bannato
Iscritto dal: Nov 2014
Messaggi: 292
|
|
![]() |
![]() |
![]() |
#15 |
Member
Iscritto dal: Oct 2010
Messaggi: 52
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:41.