![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Come si restituisce un riferimento nei parametri della funzione?
Questo tipo di codice causa problemi:
CMy* obj; // global bool func(CMy* obj) { ... obj = new CMy(); ... }
Accesso alpuntatore non valido quando si cerca di lavorare con obj.
Ho provato ad aggiungere un &.
Funziona. Non ho trovato il ritorno di riferimento nei parametri di funzione nella documentazione.
Per analogia, ho trovato questo argomento in C++: http://stackoverflow.com/questions/5286453/returning-a-pointer-as-a-function-parameter
Ma ** non funziona qui. *& al suo posto?
5.00.630 x64
Non ho potuto trovare un ritorno di riferimento nei parametri della funzione nella documentazione.
Come si restituisce un riferimento nei parametri della funzione?
Questo tipo di codice causa problemi:
Accesso al puntatore non valido quando si cerca di lavorare con obj.
Ho provato ad aggiungere un &.
Funziona. Non ho trovato il ritorno di riferimento nei parametri di funzione nella documentazione.
Per analogia, ho trovato questo argomento in C++: http://stackoverflow.com/questions/5286453/returning-a-pointer-as-a-function-parameter
Ma il tuo ** non funziona. *& al suo posto?
5.00.630 x64
IMHO (è stato molto tempo fa).
Non si può passare un puntatore attraverso gli argomenti, ma creare un riferimento. Non si può legare una nuova istanza di una classe a un riferimento. Rimane il seguente modo:
Sono un sostenitore dell'OOP, perché ho capito la comodità di programmare dal basso verso l'alto. Dalle interfacce di interazione degli oggetti all'implementazione delle classi.
IMHO (è stato molto tempo fa).
Non si può passare un puntatore attraverso gli argomenti, si può creare un riferimento. Non potete legare una nuova istanza della classe a un riferimento. Questo ci lascia questa opzione:
Ho definito la domanda in modo errato.
Passare un puntatore per riferimento. Mi sto chiedendo se si può usare la variante *& e non la copriranno nelle versioni successive? In C++, un tale costrutto sembra essere legale.
Si sta riferendo ad esso: Guida di riferimento MQL5 / Fondamenti del linguaggio / Tipi di dati / Riferimenti. Modificatore & e parola chiave questo?
Vorrei che ci fosse la giusta informazione...
Nell'articolo
https://www.mql5.com/ru/docs/basis/function/ParameterPass
si possono anche aggiungere informazioni sul lavoro con gli oggetti.
Un'interfaccia non è esterna alla classe?
Che differenza fa per gli oggetti? Un'interfaccia in questa interpretazione è un tipo di dati, perché la sua descrizione definisce abbastanza chiaramente le proprietà degli oggetti. E, di fatto, definisce il comportamento esterno degli oggetti.
Nei materiali che ho citato, gli oppositori dell'OOP hanno menzionato che è impossibile creare immediatamente la struttura delle classi senza implementare l'algoritmo, che è il motivo per cui l'ambiente OOP pratica così spesso il refactoring e perché le classi ostacolano lo sviluppo con la loro eterna riprogettazione. E questo è davvero vero. Quando si implementa qualcosa di nuovo e non si capisce a cosa può portare, bisogna rifare le lezioni e più di una volta.
Creare una buona architettura di classe è uno scoglio per i principianti. In sostanza, lo scopo della programmazione OOP è quello di scrivere il proprio"linguaggio", un linguaggio che è facile e veloce da creare in futuro. L'interfaccia è l'essenza di un linguaggio che è progettato per il compito. L'interfaccia, infatti, non deve essere intesa come una costruzione "di tipo" della classe, come un contratto per la classe, che deve essere eseguito nel codice (in MQL, non esiste e il ruolo di interfaccia può essere debolmente svolto da metodi virtuali).
Per esempio, si può creare un "linguaggio" per la creazione di nuovi EA che permette di assemblare lo schema generale degli EA da oggetti in poche righe. I segnali e le condizioni possono essere utilizzati già pronti, oppure si possono sviluppare le proprie classi di segnali e creare la propria libreria per analogia. Questa possibilità è fornita da MQL5 Wizard.
Spesso, lo schema dell'applicazione è già stato sviluppato e la "programmazione OOP" si riduce essenzialmente all'uso di classi esistenti con limitati gradi di libertà per scrivere le proprie funzionalità - questo è conveniente. Questo è il motivo per cui i framework sono così popolari. Eliminano problemi e mal di testa inutili quando si sviluppa l'architettura dell'applicazione. In effetti, scrivere qualcosa di proprio è creare una classe erede di una delle classi del framework, e scrivere l'implementazione di certi metodi di backend in essa, che sono già incorporati nella logica generale dell'applicazione (OnInit, OnTick, per esempio).
...
Creare un'architettura di classe competente è uno scoglio per i principianti. In sostanza, il significato della programmazione OOP è quello di scrivere il proprio"linguaggio", un linguaggio sul quale è conveniente e veloce creare in seguito. L'interfaccia è l'essenza di un linguaggio che è progettato per il compito. L'interfaccia non deve essere intesa come un costrutto di "tipo" della classe, come un contratto per la classe, che deve essere eseguito nel codice (in MQL, non esiste, e il ruolo dell'interfaccia può essere validato da metodi virtuali).
...
Piuttosto, il punto di OOP è di scrivere la propria architettura. Non appena abbiamo un'architettura chiara, concisa e intuitiva, tutto va a posto e né la complessità del progetto né la sua portata sono più fattori limitanti. Tuttavia, per raggiungere questa architettura molto chiara, bisogna riscrivere le classi una per una avvicinandosi a questo ideale inizialmente vago.