Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare
Abbiamo messo alla prova il drone Antigravity A1 capace di riprese in 8K a 360° che permette un reframe in post-produzione ad eliche ferme. Il concetto è molto valido, permette al pilota di concentrarsi sul volo e le manovre in tutta sicurezza e decidere con tutta tranquillità come gestire le riprese. La qualità dei video, tuttavia, ha bisogno di uno step in più per essere competitiva
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator
Dopo oltre 4 anni si rinnova la serie Sony Alpha 7 con la quinta generazione, che porta in dote veramente tante novità a partire dai 30fps e dal nuovo sensore partially stacked da 33Mpixel. L'abbiamo provata per un breve periodo, ecco come è andata dopo averla messa alle strette.
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1
realme e Aston Martin Aramco F1 Team si sono (ri)unite dando alla vita un flagship con chip Snapdragon 8 Elite Gen 5 e design esclusivo ispirato alle monoposto di Formula 1. La Dream Edition introduce la nuova colorazione Lime Essence abbinata al tradizionale Aston Martin Racing Green, decorazioni intercambiabili personalizzate e una confezione a tema F1, intorno a uno smartphone dall'ottima dotazione tecnica con batteria da 7000mAh ricaricabile a 120W e isola fotografica intercambiabile
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-02-2013, 13:10   #1
Bandit
Senior Member
 
L'Avatar di Bandit
 
Iscritto dal: Sep 2003
Messaggi: 9434
[C++]: inizializzare membri di classe

ciao a tutti ragazzi
spero in un vostro aiuto per quanto riguarda questo dubbio sul modo di scrivere un costruttore

vi pongo due esempi, e vorrei capire quale è il più indicato
Codice:
class AUTO{

private:
  const int n =50;
  char * marca;
   int prezzo;
   char targa [n];

public:
     AUTO ()
     AUTO( char * m, int p, char t)
......
nel file di implementazione
Codice:
AUTO::AUTO {
const int dim=30;
marca=new char [dim];
prezzo=0;
for(int i=0, i<=n, i++) targa[i]=0;
}

oppure è meglio questa versione


Codice:
class AUTO{

private:
  const int n =50;
  char * marca;
   int prezzo;
   char targa [n];

public:
     AUTO ():marca(0),prezzo(0),targa(0){};
     AUTO( char * m, int p, char t)
......
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W
2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370.
Bandit è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2013, 18:40   #2
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Direi che qui:
http://www.cprogramming.com/tutorial...lists-c++.html
e' spiegato molto bene
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2013, 20:15   #3
Bandit
Senior Member
 
L'Avatar di Bandit
 
Iscritto dal: Sep 2003
Messaggi: 9434
ciao sottovento
grazie della risposta

ho letto quello che mi hai indicato però non ho trovato la risposta alla mia domanda, o almeno in parte: se non avevo variabili particolari come array o quelli con estensione dinamica non avrei fatto la domanda


il primo file di implementazione può essere sostituito da
Codice:
AUTO ():marca(0),prezzo(0),targa(0){}
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W
2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370.
Bandit è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2013, 20:23   #4
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
In effetti non puoi allocare dinamicamente, se metti tutto nell'initialisation list.
Ma questa e' una cosa che devi valutare tu.
Onestamente preferisco effettuare le allocazioni cosi' come le hai fatte tu, nel costruttore: un'eventuale eccezione portera' alla mancata costruzione dell'oggetto e mi sembra una caratteristica importante. Ma ovviamente si tratta di gusti
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 27-02-2013, 20:38   #5
Bandit
Senior Member
 
L'Avatar di Bandit
 
Iscritto dal: Sep 2003
Messaggi: 9434
Quote:
Originariamente inviato da sottovento Guarda i messaggi
In effetti non puoi allocare dinamicamente, se metti tutto nell'initialisation list.
Ma questa e' una cosa che devi valutare tu.
Onestamente preferisco effettuare le allocazioni cosi' come le hai fatte tu, nel costruttore: un'eventuale eccezione portera' alla mancata costruzione dell'oggetto e mi sembra una caratteristica importante. Ma ovviamente si tratta di gusti
i gusti per adesso non mi interessano
poichè mi sto addentrando nella programmazione e vorrei sapere se possibile le cose correte.
Se ce ne sono di più forse è anche meglio: quindi posso usare l'uno o l'altro ,ma preferisci la prima versione poichè più completa?
ciao
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W
2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370.
Bandit è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 05:01   #6
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Bandit Guarda i messaggi
i gusti per adesso non mi interessano
poichè mi sto addentrando nella programmazione e vorrei sapere se possibile le cose correte.
Se ce ne sono di più forse è anche meglio: quindi posso usare l'uno o l'altro ,ma preferisci la prima versione poichè più completa?
ciao
Si, puoi usare l'uno o l'altro indifferentemente. Le differenze sono poche, e risiedono nel fatto che nella versione a initialisation list puoi esser sicuro che i membri-oggetto siano gia' stati inizializzati prima dell'esecuzione del tuo costruttore.
Pero' non puoi sempre far tutto in questo modo, per esempio non puoi allocare memoria per i tuoi membri; in questo caso usi la seconda versione.

La maggior parte delle volte non vedrai differenza fra le due versioni; esistono dei casi in cui la differenza potrebbe esistere. Quando possibile, usa l'initialisation list.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 09:05   #7
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12883
Che io sappia è possibile fare:

Codice:
class Test
{
     int* n;

public:

     Test() : n( new int(3) )
     {
     }
};
Ma dato che programmo su C++11 non so se è una feature introdotta di recente oppure se è sempre stato possibile farlo.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 09:16   #8
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da WarDuck Guarda i messaggi
Che io sappia è possibile fare:

Codice:
class Test
{
     int* n;

public:

     Test() : n( new int(3) )
     {
     }
};
Ma dato che programmo su C++11 non so se è una feature introdotta di recente oppure se è sempre stato possibile farlo.
Puo' essere, mi trovi impreparato. Mi informo
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 09:18   #9
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Hai ragione.
Ho trovato questa discussione su stackoverflow (che non e' la Bibbia ma e' affidabile):

http://stackoverflow.com/questions/1...d-memory-alloc

(Vabbe', le parentesi devono essere quadre, non tonde, ma e' un dettaglio insignificante)
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 09:39   #10
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12883
Quote:
Originariamente inviato da sottovento Guarda i messaggi
Hai ragione.
Ho trovato questa discussione su stackoverflow (che non e' la Bibbia ma e' affidabile):

http://stackoverflow.com/questions/1...d-memory-alloc

(Vabbe', le parentesi devono essere quadre, non tonde, ma e' un dettaglio insignificante)
No quello dipende se stai allocando un array o un singolo elemento .
WarDuck è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 10:28   #11
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
C'ho ripensato: allocare vettori nella initialisation list e' una cattiva idea.
Beh, lo e' anche nel costruttore classico. Anche se possibile, ritengo che sia da evitare, o quantomeno prestare molta attenzione:


Codice:
class myClass
{
   private:
     int *m_buf1;
     int *m_buf2;
     ...
     ...

   public:
     myClass(): ..., m_buf1(new int[1000]), m_buf2(new int[5000])
     {
          ...
     }
}
Non vedo come si possa evitare il memory leak....
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 14:20   #12
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da Bandit Guarda i messaggi
i gusti per adesso non mi interessano
poichè mi sto addentrando nella programmazione e vorrei sapere se possibile le cose correte.
Se ce ne sono di più forse è anche meglio: quindi posso usare l'uno o l'altro ,ma preferisci la prima versione poichè più completa?
ciao
Già che parliamo di C++ direi che non è il caso di usare i puntatori raw, ma usare unique_ptr/shared_ptr.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 14:38   #13
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Già che parliamo di C++ direi che non è il caso di usare i puntatori raw, ma usare unique_ptr/shared_ptr.
Questa e' davvero un'ottima idea
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 16:42   #14
Bandit
Senior Member
 
L'Avatar di Bandit
 
Iscritto dal: Sep 2003
Messaggi: 9434
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Già che parliamo di C++ direi che non è il caso di usare i puntatori raw, ma usare unique_ptr/shared_ptr.
il problema è che non li conosco i puntatori raw e non mi sembrano che ci siano sul libro.
Sto seguendo un certo percorso.


Però ora mi avete creato dei dubbi: che devo preferire per correttezza?
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W
2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370.

Ultima modifica di Bandit : 28-02-2013 alle 16:46.
Bandit è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 17:55   #15
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da Bandit Guarda i messaggi
il problema è che non li conosco i puntatori raw e non mi sembrano che ci siano sul libro.
Sto seguendo un certo percorso.


Però ora mi avete creato dei dubbi: che devo preferire per correttezza?
Chiedo perdono, siamo andati OT. I puntatori "raw" sono quelli classici che immagino troverai sul libro. Raw sta per "crudo, grezzo".

Nel 90% dei casi non vedrai differenze fra i due tipi di costruttori, quindi scegli quello che ti pare vai alla grande.
Il rimanente 10% sara' occupato da casi nel quale l'initialisation list sara' da preferirsi o sara' la sola opzione possibile.
Per esempio, se nella tua classe hai una variabile membro che e' un oggetto, ma tale oggetto non ha il costruttore di default (cioe' quello senza parametri), non potrai far altro che usare l'initialisation list.

Infine: presta sempre attenzione quando devi allocare memoria in un costruttore, potresti creare dei leak. Ma per ora questo non mi sembra ti interessi.
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 28-02-2013, 19:43   #16
Bandit
Senior Member
 
L'Avatar di Bandit
 
Iscritto dal: Sep 2003
Messaggi: 9434
a me la lista di inizializzazione mi pare molto più efficiente poichè scrivo meno codice e quindi meno possibilità di commettere errori, che fa sempre bene

era solo per via del vettore e del dato con estensione dinamica che mi creava dubbi nell'utilizzo della lista di inizializzazione
__________________
1)P4 2.4-Asrock p4i65- Sapphire Hd3450 512mb agp- 2GB ddr400-Hd 80gb WD- Thermaltake Litepower 450W
2)Amd 3200-Msi K8n Neo4 Platinum - 2*512 MB pc3200-Asus N6600gt- HD WD 160GB-enermax noisetacker 370.
Bandit è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Antigravity A1: drone futuristico per riprese a 360° in 8K con qualche lacuna da colmare Antigravity A1: drone futuristico per riprese a ...
Sony Alpha 7 V, anteprima e novità della nuova 30fps, che tende la mano anche ai creator Sony Alpha 7 V, anteprima e novità della ...
realme GT 8 Pro Dream Edition: prestazioni da flagship e anima racing da F1 realme GT 8 Pro Dream Edition: prestazioni da fl...
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
Shai-Hulud diventa più cattivo: e...
Aereo ultraleggero si schianta in atterr...
Windows 11 ha una nuova schermata Esegui...
Netflix si prende HBO, Harry Potter e il...
Meta, arriva il nuovo supporto dell'acco...
Spunta blu sotto accusa: perché l...
Motorola presenta edge 70 Cloud Dancer: ...
La Lexus LFA ritorna, ma è elettr...
Cristiano Ronaldo entra nell'intelligenz...
Wi-Fi 7 Mesh in ogni stanza: guida defin...
Hytale evita Steam al lancio per non ric...
Ritorna il bonus elettrodomestici: ripar...
La Russia blocca Snapchat e FaceTime: 'u...
Tesla FSD ora permette di scrivere messa...
Total War festeggia 25 anni: annunciato ...
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: 15:26.


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