Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Qualcuno può spiegare come questa inizializzazione dei campi sia migliore di questa:
è meglio di questo:
E comunque qual è il punto?
I campi const possono essere inizializzati.
Qualcuno può spiegare come questa inizializzazione dei campi sia migliore di questa:
è meglio di questo:
E comunque qual è il punto?
la questione è puramente teorica:
hanno visto, forse in SB, una chiamata al costruttore come questa:
come sarebbe diverso questo codice:
L'ho decompresso, non vedo alcuna differenza, allora sii un po' più specifico - cosa o perché possiamo usare una chiamata forzata al costruttore per gli oggetti a1 e a2?
qual è la "convenienza" della prima opzione?
La prima opzione si chiama - Inizializzazione del valore, la seconda - Inizializzazione predefinita. Ci sono sottigliezze e differenze a seconda del tipo di oggetto (se è un aggregato o ha un costruttore predefinito, ...). Per esempio, il risultato qui sarà assolutamente diverso quando si usano le parentesi e senza di esse:
Se volete afferrare la teoria fino alle vostre orecchie, andate qui https://en.cppreference.com/w/cpp/language/initialization
ZS: non è tutto rilevante per il mcl, ma come comprensione del modello di riferimento.
Se volete entrare nella teoria fino alle orecchie, andate qui https://en.cppreference.com/w/cpp/language/initialization
Non è ancora necessario, ma lo salverò per sapere dove leggere la fonte.
Grazie a tutti!
Nei plus, la seconda opzione è considerata una cattiva forma.
Ci sarà lo stesso problema che ho incontrato io - duplicazione del codice per l'inizializzazione dei campi, quando diventa necessario scrivere più di un costruttore nella classe
se usate la variante 2, potete mettere il codice duplicato in un metodo separato e chiamare questo metodo dopo aver eseguito le azioni necessarie in ogni costruttore (ho l'inizializzazione della classe per struttura e la variante 2 per il nome del file dove sono scritti i dati di questa struttura (salvataggio di backup))
Scrivere che ripetere il codice è male... Non è interessante, ma il problema è che se aggiungo un nuovo campo alla classe, devo ricordarmi di inizializzare questo campo tante volte quanti sono i costruttori - il fatto che non sia conveniente, ma il fatto che si possa dimenticare di farlo N volte, è un problema, imho
Non è ancora necessario, ma lo terrò, saprò dove leggere la fonte originale.
Grazie a tutti!
Ci sarà lo stesso problema che ho incontrato io - duplicazione del codice per l'inizializzazione dei campi, quando diventa necessario scrivere più di un costruttore nella classe
se usate la variante 2, potete mettere il codice duplicato in un metodo separato e chiamare questo metodo dopo le azioni necessarie in ogni costruttore (ho l'inizializzazione della classe per struttura e la variante 2 per il nome del file dove sono scritti i dati di questa struttura (salvataggio di backup))
Scrivere che ripetere il codice è male... Non è interessante, ma il problema è che se aggiungo un nuovo campo alla classe, devo ricordarmi di inizializzare questo campo tante volte quanti sono i costruttori - il fatto che non sia conveniente, ma il fatto che si possa dimenticare di farlo N volte, è un problema, imho
Una macro che può anche essere parametrica. Dimenticanza (ne soffro io stesso), tratta anche con questo))))
ci sarà lo stesso problema che ho incontrato io - duplicazione del codice di inizializzazione dei campi quando c'è bisogno di scrivere più di un costruttore nella classe
Se usate la variante 2, potete mettere il codice duplicato in un metodo separato e chiamare questo metodo dopo le azioni necessarie in ogni costruttore (ho l'inizializzazione della classe per struttura e la variante 2 per il nome di un file dove i dati di questa struttura sono scritti (salvataggio di backup))
Scrivere che ripetere il codice è male... Non è interessante, ma il problema è che se aggiungo un nuovo campo alla classe, dovrò ricordarmi di inizializzare questo campo tante volte quanti sono i costruttori - il fatto che non sia conveniente, ma il fatto che si possa dimenticare di farlo N volte, è un problema, imho
Andiamo, tutto può essere risolto:
Non sono contro i costruttori di default (o l'inizializzazione di default), ma se il tuo costruttore lascia l'oggetto (beh, se non è un aggregato stupido) in uno stato indefinito e poi lo inizializzi tramite qualche stampella, allora stai facendo tutto sbagliato.
ZS: a proposito, è possibile delegare il costruttore nei professionisti, mancando ovviamente
Dai, è risolvibile:
un po' più avanti di me, si è appena seduto al PC.
Il consiglio di@Vladimir Simakov di inizializzare i campi della classe usando una macro, per non dimenticare di inizializzare correttamente, beh, sì - buon trucco, ma il codice verrà letto come una chiamata a un metodo che inizializza i campi, difficile supporre che questo sia un buon tono...
Anche il tuo esempio non è il più raffinato, ma risolve il problema esattamente nel modo in cui l'ho fatto ora: un metodo di inizializzazione separato.
imho, è una questione di scopo - il modo giusto per scrivere una classe base con tutti i campi necessari, ereditare da essa, rendere il costruttore protetto e inizializzare la classe base dagli eredi e così sarà la protezione da "dimenticare" - non c'è un costruttore predefinito? - quindi almeno potete guardare su mikrosoft se cercate su google "protected constructor" - ci sarà un articolo
Il mio problema è un po' diverso, ho lasciato volutamente l'ereditarietà, per salvare lo stato dei campi della classe in un file, ho 2 campi di 2 classi, e il loro stato è anche salvato nello stesso file chiamando i metodi appropriati. Ho provato a salvare tutto quando ho ereditato da una classe base, è diventato molto disordinato, l'ho riscritto senza ereditarietà, tutto è diventato "trasparente" ora.
Un po' più avanti di me, si è appena seduto al PC.
Il consiglio di@Vladimir Simakov di inizializzare i campi della classe usando una macro, per non dimenticare di inizializzare correttamente, beh, sì - buon trucco, ma il codice si leggerà come una chiamata a un metodo che inizializza i campi, difficile supporre quanto sia buono il tono...
Anche il tuo esempio non è il più raffinato, ma risolve il problema esattamente nel modo in cui l'ho fatto ora: un metodo di inizializzazione separato.
imho, è una questione di scopo - il modo giusto per scrivere una classe base con tutti i campi necessari, ereditare da essa, rendere il costruttore protetto e inizializzare la classe base dagli eredi e così sarà la protezione dal "dimenticare" - non c'è un costruttore di default, giusto? - quindi almeno potete guardare su mikrosoft se cercate su google "protected constructor" - ci sarà un articolo
Il mio problema è un po' diverso, ho lasciato volutamente l'ereditarietà, per salvare lo stato dei campi della classe in un file, ho 2 campi di 2 classi, e il loro stato è anche salvato nello stesso file chiamando i metodi appropriati. Ho provato a salvare tutto quando ho ereditato da una classe base, è diventato molto complicato; l' ho riscritto senza ereditarietà, tutto è diventato "trasparente" ora.
Cosa c'è di così confuso?
Cosa c'è di così confuso?
Questo è esattamente quello da cui mi sono allontanato, e all'inizio ho fatto
con questo approccio - ereditare da una classe base, "dove tutto è" - tutto funziona, ma fino a quando non vogliamo provare a fare diversi campi di classe, e poi vogliamo aggiungere diversi campi in ogni classe campo e inchiodare il tutto con un array dinamico di classi
e poi otterremo che non possiamo implementare il metodo Save(int hndl) stesso in una classe base - questo metodo sarà in realtà un'interfaccia, che, come discusso sopra, non sarà affatto necessaria - si può scrivere senza interfacce
Di solito massimizzo i miei sforzi sulla flessibilità del codice - minimo di confusione - il risultato è un nuovo problema risolto, che la mia terminologia sia perdonata)))
il problema sarà, quando si implementa il salvataggio su file, è necessario elaborare l'intestazione del file, che dovrebbe descrivere la quantità totale di diversi tipi di voci e poi è necessario non perdere la logica / ordine di salvataggio dei dati, al fine di leggere tutto correttamente.... e il finale sarà se si cambia anche un solo campo in una classe
imho, la laboriosità di tale eredità "facile" da una classe base - si riduce allo sviluppo e alla manutenzione di un piccolo database, al monitoraggio costante dei cambiamenti in qualsiasi classe