|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2005
Città: Bari
Messaggi: 349
|
[C++] mi aspettavo un errore..e invece... [arg. puntatori a oggetti]
Salve ragazzi...
allora, partiamo con ordine: sto lavorando ad un progetto in c++ per l'esame di fondamenti di informatica 2, il tema d'anno è la "gestione di un cinema multisala". Ho pensato a vari livelli di accesso, fatto tutte le varie classi, definito i metodi ecc... ora, la cosa "strana" che mi è capitata è la seguente: Ho una class amministratore con delle funzioni membro dichiarate...dato che il progetto serve a far vedere di saper fare quante più cose possibile ho deciso, quando si viene autenticati come administrator, di accedere alle funzioni secondo la seguente logica: -il puntatore ad "amministratore" precedentemente dichiarato viene utilizzato per una chiamata alla new (admin = new amministratore; ) -accedo alle funzioni a run time (admin->funzione_membro()); -libero la memoria con "delete admin;" La cosa strana è questa: se lascio dichiarato solo il puntatore all'inizio del main (amministratore *admin; ) e provo a chiamare una funzione membro come sopra funziona!!!! io mi aspettavo qualcosa di differente come un errore di qualche tipo...ora mi chiedo: -è capitato anche a voi?? -può essere una "agevolazione" del visual c++ 6.0 ? (nel senso che non appena vede la dichiarazione di un puntatore istanzia subito un oggetto e lo fa puntare?) Grazie mille per l'attenzione, Vito
__________________
Si può vincere una guerra in due...o forse anche da solo. Si può estrarre il cuore anche al più nero assassino, ma è più difficile cambiare un'idea! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Funziona ma ti dovrebbe andare in crash, se non subito, dopo poche chiamate.
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
In realtà dovrebbe crashare subito anche perchè non essendo inizializzato quel puntatore vale 0x0c0c0c0c, ci deve essere un altro motivo.
Difficile che nell'enorme elenco di bachi di VC6 ci sia una cosa simile. |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Jul 2007
Messaggi: 27
|
In realtà una classe può anche essere usata unicamente per contenere altri metodi non necessitando quindi di una innizializzazione formale. Finchè usi metodi che non facciano riferimento a variabili di classe il programma funziona senza inizializzazione
Difatti viene dato un Warning se si usa una puntatore ad una classe non inizializzata, non un errore Codice:
warning C4700: local variable 'a' used without having been initialized |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Dec 2005
Messaggi: 558
|
ma in questo caso le funzioni non dovrebbero essere definite static? non pensavo che anche senza essere static potessero essere richiamate
|
|
|
|
|
|
#6 | |
|
Junior Member
Iscritto dal: Jul 2007
Messaggi: 27
|
Quote:
Codice:
class PROVA
{
public:
int id(int);
int ide(int);
int e;
};
int PROVA::id(int a){
return(a);
}
int PROVA::ide(int a){
e = a;
return(a);
}
Codice:
PROVA *a; Warning (a->id(5)); Così funziona senza darmi problemi se richiamo id, ma se richiamo ide allora dà errore |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 1545
|
|
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
Codice:
class PROVA
{
public:
int e;
};
int id(PROVA *this, int a){
return(a);
}
int ide(PROVA *this, int a){
this->e = a;
return(a);
}
Codice:
Warning (id(NULL, 5)); // ok Warning (ide(NULL, 5)); // errore |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:37.




















