Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte
Abbiamo provato le nuove CPU Intel Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: più core e ottimizzazioni al funzionamento interno migliorano le prestazioni, anche in virtù di prezzi annunciati interessanti. A questo si aggiungono nuove ottimizzazioni software. Purtroppo, a fronte di prestazioni di calcolo elevate, il quadro rimane incerto nel gaming, dove l'andamento rimane altalenante. Infine, rimane il problema della piattaforma a fine vita.
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu
Il modello "build to order" di PCSpecialist permette di selezionare una struttura base per un sistema, personalizzandolo in base alle specifiche esigenze con una notevole flessibilità di scelta tra i componenti. Il modello Lafité 14 AI AMD è un classico notebook clamshell compatto e potente, capace di assicurare una elevata autonomia di funzionamento anche lontano dalla presa di corrente
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-05-2011, 14:58   #1
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
[C++]Help getter & setter e ptr

Salve ragazzi avrei bisogno di una spiegazione un pò dettagliata su questi due metodi e vorrei capirne la sintassi!
Ho capito che servono a dichiarare e a settare il valore della variabile in questione per cui è meglio metterli nel programma...
leggo che serve anche a livello di manutebilità del codice ma qui non capisco molto...cioè alla fine non mi torna troppo dove sta il risparmio di tempo!
C'entra qlcs il puntatore this?
quest'ultimo come funziona?
grazie mille
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2011, 17:04   #2
GByTe87
Senior Member
 
L'Avatar di GByTe87
 
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
Get/Set si usano per avere accesso alle variabili membro di un oggetto, nel caso in cui queste siano state dichiarate "private".

Il nascondere l'accesso alle variabili membro è uno dei metodi con cui realizzato l'incapsulamento. Non si tratta di un metodo per risparmiare tempo.

Non capisco un riferimento al puntatore this, esso non è altro che un riferimento all'oggetto che ha generato la chaimata.
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO
GByTe87 è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2011, 17:11   #3
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
Perché mi pareva che nel set ci foss sempre un this ->
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 16-05-2011, 21:06   #4
Naufr4g0
Senior Member
 
L'Avatar di Naufr4g0
 
Iscritto dal: Nov 2005
Città: Palermo
Messaggi: 1474
Quote:
Originariamente inviato da Solido Guarda i messaggi
Perché mi pareva che nel set ci foss sempre un this ->
beh si si mette quando vuoi utilizzare come parametro della funzione lo stesso nome della variabile membro dell'oggetto, tipo:

Codice:
void MyClass::SetVar (int var)
{
      this->var = var;
}
In questo modo fai capire al compilatore che si tratta di due var diversi.
Io in genere però metto nomi diversi ed evito il problema:

Codice:
void MyClass::SetVar (int var)
{
      mVar = var;
}
Naufr4g0 è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2011, 11:09   #5
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
Quote:
Originariamente inviato da Naufr4g0 Guarda i messaggi
beh si si mette quando vuoi utilizzare come parametro della funzione lo stesso nome della variabile membro dell'oggetto, tipo:

Codice:
void MyClass::SetVar (int var)
{
      this->var = var;
}
In questo modo fai capire al compilatore che si tratta di due var diversi.
Io in genere però metto nomi diversi ed evito il problema:

Codice:
void MyClass::SetVar (int var)
{
      mVar = var;
}

ecco appunto basta cambiare nome!!! ma quel mVar non deve essere dichiarata all'interno di MyClass?

ecco ora ho un dubbio sui costruttori... perchè leggendo i vari libri si perdono in mille esempi ma non mi riesce di capirne la sintassi:
il distruttore basta mettere un ~nomedellaclasse
per i costruttori invece? perchè alle volte vedo i :: alle volte no
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2011, 12:32   #6
GByTe87
Senior Member
 
L'Avatar di GByTe87
 
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
Quote:
Originariamente inviato da Solido Guarda i messaggi
ecco appunto basta cambiare nome!!! ma quel mVar non deve essere dichiarata all'interno di MyClass?
mVar deve essere una variabile membro di MyClass.

Quote:
Originariamente inviato da Solido Guarda i messaggi
ecco ora ho un dubbio sui costruttori... perchè leggendo i vari libri si perdono in mille esempi ma non mi riesce di capirne la sintassi:
il distruttore basta mettere un ~nomedellaclasse
per i costruttori invece? perchè alle volte vedo i :: alle volte no
Se dichiari e implementi una funzione (inclusi costruttori e distruttori, quindi) contestualmente, durante la definizione della classe non c'è necessità di utilizzare l'operatore di scope resolution (ossia il :: ). Attenzione che così facendo le funzioni vengono automaticamente dichiate inline.

Se, invece, dichiari una funzione all'interno della classe e la definisci fuori dalla classe, il compilatore necessita di sapere che la funzione che stai scrivendo si riferisce a quella classe.
Cosa che fai usando la notazione NomeClasse::NomeFunzione().

Data una classe MyClass, comunque, il costruttore (o i costruttori) si chiameranno sempre MyClass, mentre il distruttore ~MyClass.
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO
GByTe87 è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2011, 13:56   #7
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
Quote:
Originariamente inviato da GByTe87 Guarda i messaggi
mVar deve essere una variabile membro di MyClass.



Se dichiari e implementi una funzione (inclusi costruttori e distruttori, quindi) contestualmente, durante la definizione della classe non c'è necessità di utilizzare l'operatore di scope resolution (ossia il :: ). Attenzione che così facendo le funzioni vengono automaticamente dichiate inline.

Se, invece, dichiari una funzione all'interno della classe e la definisci fuori dalla classe, il compilatore necessita di sapere che la funzione che stai scrivendo si riferisce a quella classe.
Cosa che fai usando la notazione NomeClasse::NomeFunzione().

Data una classe MyClass, comunque, il costruttore (o i costruttori) si chiameranno sempre MyClass, mentre il distruttore ~MyClass.

ok quindi i :: funzionano anche per i costruttori?

se ad es ho una classe stack così definita:

class stack{
protected:
int tos;
data*buffer;
int size;

public:
stack(int s);
stack( int s, data v);
~stack(void)
boolean push( data value );
boolean pop ( data* value_ptr);
};

stack:: stack ( int s ) : tos(0), size (s), buffer( new data[s])
{}

ho che il costruttore si riferisce a stack e ne inizializza i dati membro protetti?
e quell' int s in parensi ?
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2011, 14:11   #8
GByTe87
Senior Member
 
L'Avatar di GByTe87
 
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
Si, quello è il costruttore; (int s) indica i parametri da passare al costruttore, in questo caso un intero.

Se ci fai caso, lo stesso intero, (la variabile s) viene passato ai costruttori degli oggetti/variabili membro della classe.

Ti consiglierei, se vuoi darti al C++, di partire con un buon libro; apprendere nozioni in questo modo, mano a mano che incontri cose che non conosci, non è il massimo; rischi di ritrovarti grosse lacune più avanti.
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO
GByTe87 è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2011, 15:07   #9
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
Quote:
Originariamente inviato da GByTe87 Guarda i messaggi
Si, quello è il costruttore; (int s) indica i parametri da passare al costruttore, in questo caso un intero.

Se ci fai caso, lo stesso intero, (la variabile s) viene passato ai costruttori degli oggetti/variabili membro della classe.

Ti consiglierei, se vuoi darti al C++, di partire con un buon libro; apprendere nozioni in questo modo, mano a mano che incontri cose che non conosci, non è il massimo; rischi di ritrovarti grosse lacune più avanti.
ma infatti ho dei libri solo che queste sono le cose che nn sono spiegate ,imho, bene! Gli approcci troppo pratici lasciano delle lacune!

cmq quel valore int s vuol dire che richiama il primo costruttore che accetta solo un paramentro?
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2011, 11:30   #10
Naufr4g0
Senior Member
 
L'Avatar di Naufr4g0
 
Iscritto dal: Nov 2005
Città: Palermo
Messaggi: 1474
Ma invece di partire da queste complesse strutture dati non è meglio fare cose più semplici senza puntatori magari?
Si rischia di impazzire se si comincia così!
Se ti servono strutture dati usa le STL: vector, list, ...

Tornando al discorso dei " :: "

Si usano quando definisce un metodo non in line, cioè fuori dalla dichiarazione della classe

inline:
Codice:
class MyClass {
....
void SetVar (int var) { mVar = var; }
....
}
alternativa:
Codice:
class MyClass
{
    void SetVal(int val);
}

MyClass::SetVal(int val)
{
    mVar = var;
}
Se la scrivi così

Codice:
inline MyClass::SetVal(int val)
{
    mVar = var;
}
è come se l'avessi scritta dentro la definizione della classe come nel primo caso.

Ultima modifica di Naufr4g0 : 19-05-2011 alle 14:50.
Naufr4g0 è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2011, 20:20   #11
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
Beh ho messo quell'esempio perchè stavamo trattando argomenti del genere e non perchè mi voglio complicare la vita
cmq grazie mi sei stato piuttosto di aiuto!

però non capisco bene il 3° esempio...
ho visto che inline è una parola chiave, quindi io in quel modo avverto il compilatore della dichiarazione in line. Ma la parola class?
cioè quelle istruzioni seguono la dichiarazione della classe:


class MyClass {
....
void SetVar (int var) { mVar = var; }
....
}

oppure no?

grazie mille
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 19-05-2011, 23:27   #12
Naufr4g0
Senior Member
 
L'Avatar di Naufr4g0
 
Iscritto dal: Nov 2005
Città: Palermo
Messaggi: 1474
Quindi mi spiego, o fai come nel primo caso

Codice:
class MyClass {
....
void SetVar (int var) { mVar = var; }
....
}
e il metodo è già dichiarato implicitamente inline, oppure scrivi solo il prototipo del metodo

Codice:
void SetVar (int var);
all'interno della definizione della classe e lo implementi all'esterno

Codice:
inline MyClass::SetVal(int val)
{
    mVar = var;
}
ed hai ottenuto due cose equivalenti.
Il motivo per cui c'è questa seconda alternativa è solo per la pulizia del codice.
In genere i prototipi si mettono in un file header (.h) con la definizione della classe, mentre le implementazioni (inline o no che siano) in un file .cpp con lo stesso nome dell'header.
Naufr4g0 è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2011, 16:36   #13
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
quindi se ho capito...

nel primo caso definisco il metodoSetVar all'interno della classe e questo mi fa una assegnazione: prendo il parametro di input e lo assegna a mVar
mentre nel secondo caso io dichiaro il prototipo in un header file e lo definisco all'esterno e poi quando lo vorrò utilizzare , ad es nel main, dovrò scrivere:
SetVal( int 5) ad es?
perchè VaL e non VaR?

grazie in anticipo


poi per es ci sono anche questi es con questa sintassi qua:
imageTemplate(int w, int h) : _w(w), _h(h){ _pixels= new T[_w*_h];};
nella tonda ci sono i paramenti che passo a imageTemplate nella graffa c'è la definizione del costruttore mentre " :_w(w), _h(h)" cos'è?

edit: dubbio ulteriore:
tornando all'esempio dello stack che ho fatto ad inizio pagina:
se per dire dopo ho una funzione così:
void client(void)
{
stack S;
stack S2(10);
stack S3(10,20);
...o anche una assegnazione del tipo
sptr= new stack(10,5);
}

in questo caso il compilatore mi dovrebbe automaticamente richiamare il costruttore giusto no?
ma quei nomi: S, S2 ecc... non vanno dichiarati prima?
__________________
Ho concluso felicemente molte trattative su questo forum!

Ultima modifica di Solido : 21-05-2011 alle 17:47.
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2011, 19:12   #14
GByTe87
Senior Member
 
L'Avatar di GByTe87
 
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
Quote:
Originariamente inviato da Solido Guarda i messaggi
quindi se ho capito...

nel primo caso definisco il metodoSetVar all'interno della classe e questo mi fa una assegnazione: prendo il parametro di input e lo assegna a mVar
mentre nel secondo caso io dichiaro il prototipo in un header file e lo definisco all'esterno e poi quando lo vorrò utilizzare , ad es nel main, dovrò scrivere:
SetVal( int 5) ad es?
nomeOggetto.SetVal(5);

Quote:
Originariamente inviato da Solido Guarda i messaggi
perchè VaL e non VaR?
Alle funzioni normali (non costruttori e distruttori) puoi dare il nome che preferisci, quindi non c'è differenza.


Quote:
Originariamente inviato da Solido Guarda i messaggi
poi per es ci sono anche questi es con questa sintassi qua:
imageTemplate(int w, int h) : _w(w), _h(h){ _pixels= new T[_w*_h];};
nella tonda ci sono i paramenti che passo a imageTemplate nella graffa c'è la definizione del costruttore mentre " :_w(w), _h(h)" cos'è?
In questo caso il costruttore di una classe derivata passa dei parametri ai costruttori delle classi da cui deriva. (Molto probabilmente _w e _h sono dei membri della tua classe).

Quote:
Originariamente inviato da Solido Guarda i messaggi
edit: dubbio ulteriore:
tornando all'esempio dello stack che ho fatto ad inizio pagina:
se per dire dopo ho una funzione così:
void client(void)
{
stack S;
stack S2(10);
stack S3(10,20);
...o anche una assegnazione del tipo
sptr= new stack(10,5);
}

in questo caso il compilatore mi dovrebbe automaticamente richiamare il costruttore giusto no?
Si, il compilatore riconosce il costruttore corretto e lo invoca. (l'overload funziona senza problemi anche per i costruttori).

Quote:
Originariamente inviato da Solido Guarda i messaggi
ma quei nomi: S, S2 ecc... non vanno dichiarati prima?
E perchè mai? Sono i nomi delle istanze della classe stack.
La stessa cosa che fai con "int i;", per intenderci.
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO
GByTe87 è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2011, 19:37   #15
Solido
Senior Member
 
L'Avatar di Solido
 
Iscritto dal: Jan 2004
Città: Figline(FI)
Messaggi: 5847
Quote:
Originariamente inviato da GByTe87 Guarda i messaggi
nomeOggetto.SetVal(5);
OK



Quote:
Originariamente inviato da GByTe87 Guarda i messaggi
Si, il compilatore riconosce il costruttore corretto e lo invoca. (l'overload funziona senza problemi anche per i costruttori).
Ok

Quote:
Originariamente inviato da GByTe87 Guarda i messaggi

E perchè mai? Sono i nomi delle istanze della classe stack.
La stessa cosa che fai con "int i;", per intenderci.
Questi punti ora mi sono chiari, mentre non mi sono chiari gli altri 2:

"Alle funzioni normali (non costruttori e distruttori) puoi dare il nome che preferisci, quindi non c'è differenza."

non capisco come possa scrivere un certo nome nel prototipo e poi utilizzare un altro nome per definire la funzione:

void SetVar (int var);



inline MyClass::SetVal(int val)
{
mVar = var;
}


come fa il compilatore a collegare SetVal e SetVar?


"In questo caso il costruttore di una classe derivata passa dei parametri ai costruttori delle classi da cui deriva. (Molto probabilmente _w e _h sono dei membri della tua classe)."

Che diff c'è allora tra i paramentri _w,_h e quello passato nella parentesi tonda:
imageTemplate(int w, int h) ?

grazie mille per adesso:
ps: che libri hai usato per studiare?
perchè io ho quello di Stroustrup in persona ma non riesce a fugarmi questi dubbi
__________________
Ho concluso felicemente molte trattative su questo forum!
Solido è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2011, 19:43   #16
GByTe87
Senior Member
 
L'Avatar di GByTe87
 
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
Quote:
Originariamente inviato da Solido Guarda i messaggi
"Alle funzioni normali (non costruttori e distruttori) puoi dare il nome che preferisci, quindi non c'è differenza."

non capisco come possa scrivere un certo nome nel prototipo e poi utilizzare un altro nome per definire la funzione:

void SetVar (int var);



inline MyClass::SetVal(int val)
{
mVar = var;
}


come fa il compilatore a collegare SetVal e SetVar?
Sorry, mi ero perso un pezzo. Il nome della funzione nel prototipo e nell'implementazione devono essere uguali. Quindi si, dev'essere SetVar.

Quote:
Originariamente inviato da Solido Guarda i messaggi
"In questo caso il costruttore di una classe derivata passa dei parametri ai costruttori delle classi da cui deriva. (Molto probabilmente _w e _h sono dei membri della tua classe)."

Che diff c'è allora tra i paramentri _w,_h e quello passato nella parentesi tonda:
imageTemplate(int w, int h) ?
Nella parentesi tonda hai i parametri passati dal chiamante, mentre _w e _h saranno le variabili membro della tua classe.


Quote:
Originariamente inviato da Solido Guarda i messaggi
grazie mille per adesso:
ps: che libri hai usato per studiare?
perchè io ho quello di Stroustrup in persona ma non riesce a fugarmi questi dubbi
Diciamo che sto approdando al C++ in questo periodo dopo 3 anni di C puro.
Sto usando come libro "C++: The Complete Reference" di Schildt.
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO
GByTe87 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
iPad 12 arriverà nel 2026 e sar&a...
AMD per il futuro dell'IA in Corea del S...
L'IA agentica incrementa il rischio cybe...
Rapporto Clusit 2026: finanza e infrastr...
Gli stessi sali che solidificano il tofu...
Il conflitto in Medio Oriente minaccia l...
OnlyFans, scomparso il proprietario Leon...
Le migliori offerte Amazon da leggere in...
Recensioni su Trustpilot non affidabili,...
Il CISPE denuncia Broadcom all'antitrust...
Il cyberattacco che negli Usa ha trasfor...
AI Grid Intelligent Orchestration, l'inf...
Roborock Qrevo CURV 2 Flow X: tecnologia...
Quanto viaggia il modem di iPhone Air? I...
300 GB di memoria RAM per le future gene...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:22.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v