|
|||||||
|
|
|
![]() |
|
|
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 15: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: 09:41.



















