|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2004
Messaggi: 213
|
[C++] Dubbio classe
Salve,
sto seguendo una guida al C++ e ho un dubbio ovviamente sulle classi!! Praticamente dopo aver letto una guida volevo sapere se una cosa del genere è possibile, l'ho provata ma mi da errore. So che è inutile fare una cosa del genere ma è per capire se si può fare. Poi si può usare invece di calcolo.aria, senza dichirare calcolo, usare Matematica::aria()??? Cmq questo mi da errore di compilazione, "main must return int", "new type can't be definied", "extraneous int ignored". Non capisco il problema forse perchè non ho capito le classi come funzionano! Codice:
#include <iostream>
using namespace std;
class Matematica
{
public:
int aria(int x, int y)
{
int risultato=x*y;
return risultato;
}
}
int main()
{
Matematica calcolo;
cout << "Il totale e' " << calcolo.aria(5,6);
return 0;
}
Fatemi sapere. Bye |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4908
|
Hai dimenticato il ; dopo la dichiarazione della classe:
Codice:
class Matematica
{
public:
int aria(int x, int y)
{
int risultato=x*y;
return risultato;
}
};
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Poi direi area e non aria
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
scusate l'intromissione
Ma in C++ non serve il 'new' per inizializzare le classi ? Grazie RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Non necessariamente, dipende se vuoi creare una variabile allocata staticamente (la cui vita comincia dal punto in cui è dichiarata fino alla fine del blocco) o una variabile allocata dinamicamente (con la new).
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Ah, quindi non è come generalmente avviene per altri linguaggi in cui è necessario dichiarare esplicitamente se la classe sia statica ?
E, (chiedo scusa ancora all'autore per il prolungarsi del mio OT) avviene solo in C++ managed o anche nella versione 'tradizionale' ? Grazie ancora. RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quello che ti ho riferito è relativo al C++ normale, il C++ managed non lo conosco.
No, dire che la classe è statica è una cosa dire che una variabile è allocata staticamente è un'altra. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Scusami ancora
quello che non capisco è: Codice:
Matematica (classe) calcolo (oggetto) ; Codice:
Matematica calcolo = new Matematica(); Grazie mille. RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
No, non è la stessa cosa. La parola chiave static esiste anche in C++.
Un oggetto in C++ è allocato staticamente quando occupa una posizione di memoria predefinita (rispetto al registro che punta alla base dello stack) e non modificabile. Per memorizzare queste variabili si usa lo stack. Lo scope di questa variabile è dalla posizione di dichiarazione fino alla fine del blocco corrispondente. Il tempo di vita è da quando viene eseguito il prologo della funzione/metodo/oggetto, fino alla fine della funzione/metodo o alla distruzione dell'oggetto. Matematica calcolo; Un oggetto è allocato dinamicamente quando si fa uso di new per riservare una zona di memoria (nello heap) dedicata a contenere l'oggetto. La new ritorna l'indirizzo della locazione di memoria riservata che deve essere contenuto all'interno di un puntatore. Lo scope si ottiene attraverso il puntatore "calcolo", la variabile è raggiungibile anche dopo la terminazione della funzione/metodo a patto che rimanga un riferimento al puntatore (ritornato dalla funzione/metodo, immagazzinato nei membri della classe o in un parametro della funzione/metodo passato per riferimento o indirizzo). Il tempo di vita è dalla new fino a quando non richiamo una delete esplicita. Matematica * calcolo = new Matematica(); |
|
|
|
|
|
#10 | |
|
Registered User
Iscritto dal: May 2005
Città: far away from home
Messaggi: 1038
|
Quote:
come questa x ad esempio: void fun(){ int x; } Le variabili statiche: void fun(){ static int x; } durano oltre la fine della funzione. Oppure è corretto usare il termine allocato staticamente per tutto ciò che non è allocato dinamicamente con new/malloc come ad esempio le variabili automatiche e le variabili globali? Ultima modifica di javaboy : 27-11-2008 alle 18:21. |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
C'è differenza fra dire variabile statica e variabile allocata staticamente.
In C++ (e in C) esistono due tipi di allocazione, statica e dinamica. Le variabili allocate staticamente sono variabili automatiche. Quelle allocate dinamicamente non sono automatiche, o meglio è automatico l'eventuale puntatore che le indirizza se è allocato staticamente. Codice:
int * pippo()
{
int * pluto = new int();
return pluto;
}
Codice:
void pluto()
{
static int a;
...
}
Codice:
void pluto()
{
int a;
...
}
|
|
|
|
|
|
#12 | |
|
Registered User
Iscritto dal: May 2005
Città: far away from home
Messaggi: 1038
|
Quote:
Tu dici che le variabili allocate staticamente sono automatiche. void fun(){ static int x; } Questa è automatica? Una variabile globale è automatica? |
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sono automatiche, solo la loro vita dura dall'inizio alla fine del programma
|
|
|
|
|
|
#14 |
|
Registered User
Iscritto dal: May 2005
Città: far away from home
Messaggi: 1038
|
Lo stroustrup distingue 3 tipi di memoria:
Memoria statica:un oggetto è allocato dal collegatore per la durata del programma.... Memoria automatica:argomenti delle funzioni e variabili locali. Memoria dinamica:nella quale il programma alloca..... |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Ok, ma sono termini, non si è mai sentito dire: alloco un vettore in modo automatico...invece si è sempre sentito dire alloco un vettore in modo statico (e non in riferimento a static). E di persone che mi hanno parlato di C e C++ in 19 anni ne ho viste, professori inclusi.
La terminologia di fatto ed in italiano è questa indipendentemente da Stroustrup. Nota inoltre che io ho fatto sempre uso del termine "allocazione/allocata" e non memoria. Una variabile automatica è allocata in modo statico. Per me non fa una grinza Come per la definizione di variabile automatica: cioè una variabile visibile dal punto di dichiarazione e distrutta senza l'intervento diretto del programmatore. Per me anche le variabili globali sono automatiche. E ripeto non sto parlando di memoria. Ultima modifica di cionci : 27-11-2008 alle 19:12. |
|
|
|
|
|
#16 | |
|
Registered User
Iscritto dal: May 2005
Città: far away from home
Messaggi: 1038
|
Quote:
|
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Diciamo che ci ho lavorato
Più che altro ho iniziato molto presto. Il K&R l'ho cominciato a studiare a 12 anni. |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
In effetti...
![]() Che precocia!
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:21.





















