|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
[C++]Distruttori
Ciao raga, sto studiando i distruttori e non ho capito bene come usarli
I miei punti interrogativi sono: 1)Come li utilizzo?? 2)Sono fondamentali?? 3)Devo richiamarli in qualche modo?? Grazie in anticipo |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
1)Come li utilizzo??
class Prova { public: Prova(); // costruttore ~Provs(); // distruttore } 2)Sono fondamentali?? si se usi variabili dinamiche. 3)Devo richiamarli in qualche modo?? no
__________________
Gnu/Linux User ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
ok grazie.
Ma se non specifico il distruttore il compilatore le crea in auto? |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì...ma non dealloca la memoria allocata dinamicamente dalla classe
![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Mar 2002
Città: Empoli (firenze)
Messaggi: 1521
|
eh no,il distruttore viene richiamato solo quando l'oggetto perde la sua visibilità ma non vengono cancellate tutti i suoi successivi accomenti,ma solo i suoi attributi e metodi!
__________________
Imac 20" + iphone 4 16gb + MacBook Pro 13" Concluso affari con: bottoni,skino,semmy83,alex_ |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
Raga ho finito la prima parte sulle classi e adesso il libro propone un esercizio:
Definire una classe tris che permette di giocare a tris io per il momento volevo metterla così: [code] class tris { public: tris(); void vincita(); void scambio(); private: tavolo[3][3]; }; Ovviamente aggiugero i parametri da passare e magari qualche altra funzione L'unica cosa che mi lascia un ? e la matrice, posso scrivere in quel modo oppure darà errore? Ultima modifica di Gogeta ss4 : 27-05-2004 alle 14:37. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Mar 2002
Città: Empoli (firenze)
Messaggi: 1521
|
X farti capire.
Alloco dinamicamente in una funzione la variabile intera A. Quanto la funzione si richiama la variabile a viene allocata,alla chiusura della funzione lo spazio allocato per la variabile A viene reso libero e riutilizzabile. spero di aver reso l'idea!
__________________
Imac 20" + iphone 4 16gb + MacBook Pro 13" Concluso affari con: bottoni,skino,semmy83,alex_ |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Gli devi dare un tipo a quella matrice...
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
a cavolo vero
![]() |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
Codice:
tris::tris() { //inizializza la matrice di trattini// tris::tavolo[3][3]={{'-','-','-'},{'-','-','-'},{'-','-','-'}}; } Quando compilo mi dice che c'è un errore ti sintassi '{' Non riesco a trovarlo |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
uppette
![]() |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non devi specificare tris:: davanti...ed inoltre il vettore non è inizializzabile in questo modo...ma devi farlo tramite 2 for...
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
Ho fatto un programma e l'ho inizializzato in questo modo e funziona...
Come mai adesso non si può? |
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Perchè quella non è una inizializzazione
![]() |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
Non e che mi potresti aiutare?
Ho qualche problemino Ti posto la definizione della classe e la definizione dei membri della classe Codice:
#ifndef TRIS_H #define TRIS_H class tris { public: tris(); int vincita(); void scambio_gio1(int,int); void printTavolo(); void scambio_gio2(int,int); int controllo(int,int); private: char tavolo[3][3]; }; #endif Codice:
Definizioni funzione membri #include <iostream.h> #include "classi.h" #include <string.h> #include <iomanip.h> tris::tris() { //inizializza la matrice di trattini int i,j; for(i=0;i<3;i++) { for(j=0;j<3;j++) tavolo[i][j] = '-'; } for(i=0;i<3;i++) { cout << endl; for(j=0;j<3;j++) cout << tavolo[i][j]; } cout << endl << endl; } int vincita() { //Controlla tutti casi possibili di vincita// if(tavolo[0][0]==tavolo[0][1]==tavolo[0][2]) return 1; if(tavolo[1][0]==tavolo[1][1]==tavolo[1][2]) return 1; if(tavolo[2][0]==tavolo[2][1]==tavolo[2][2]) return 1; if(tavolo[0][0]==tavolo[1][0]==tavolo[2][0]) return 1; if(tavolo[0][1]==tavolo[1][1]==tavolo[2][1]) return 1; if(tavolo[0][2]==tavolo[1][2]==tavolo[2][2]) return 1; if(tavolo[0][0]==tavolo[1][1]==tavolo[2][2]) return 1; if(tavolo[0][2]==tavolo[1][1]==tavolo[2][0]) return 1; } void printTavolo() { int i,j; cout <<setw(35) <<"0" <<setw(4) <<"1" <<setw(4) <<"2"; cout <<"\n" <<"\n"; for(i=0;i<3;i++) { cout <<setw(32) <<i <<' ' <<' '; for(j=0;j<3;j++) cout <<tavolo[i][j] <<setw(4); cout<<endl; } } void scambio_gio1(int i,int j) { strcpy(tavolo[i][j],"x"); } void scambio_gio2(int i,int j) { strcpy(tavolo[i][j], "o"); } int controllo(int i,int j) { int c; if(c=strcmp(tavolo[i][j], 'x')==0 || c=strcmp(tavolo[i][j], 'o')==0) return 1; else return 0; } Adesso nella funzione vincita mi da questi errori: 1)error C2065: 'tavolo' : undeclared identifier 2)Subscript requires array or pointer type( me lo ripete una ventina di volte. Dove sbaglio?? |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
Ho risolto!
Avevo dimenticato i risolutori di scope Adesso mi da errori nella strcoy e nella strcmp Non so se le ho usate correttamente Mi da questi erori: error C2664: 'strcpy' : cannot convert parameter 1 from 'char' to 'char *' error C2664: 'strcmp' : cannot convert parameter 1 from 'char' to 'const char *' Sinceramente non ho mai usato in una strmcp e in una strcpy un vettore o matrice |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Codice:
#ifndef TRIS_H #define TRIS_H class tris { public: tris(); int vincita(); void scambio_gio1(int,int); void printTavolo(); void scambio_gio2(int,int); int controllo(int,int); private: char tavolo[3][3]; }; #endif Codice:
Definizioni funzione membri #include <iostream.h> #include "classi.h" #include <string.h> #include <iomanip.h> tris::tris() { //inizializza la matrice di trattini int i,j; for(i=0;i<3;i++) { cout << endl; for(j=0;j<3;j++) { tavolo[i][j] = '-'; cout << tavolo[i][j]; } } cout << endl << endl; } int tris::vincita() { .... .... .... void tris::scambio_gio1(int i,int j) { tavolo[i][j] = 'x'; } void tris::scambio_gio2(int i,int j) { tavolo[i][j] = 'o'; } int tris::controllo(int i,int j) { if(tavolo[i][j] == 'x' || tavolo[i][j] == 'o') return 1; else return 0; } |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
Se ho capito bene, noon hai usato strcpy e strcmp perchè devo controllare un solo carattere e non una stringa intera giusto??
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì...giusto...
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: May 2001
Città: Milano
Messaggi: 3197
|
ok grazie mille
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:18.