Errori, bug, domande - pagina 1057
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
Il portafoglio è solo un caso speciale. E nessuno impedisce di metterlo nella parte privata.
In un altro caso, potreste aver bisogno di accedere alla variabile della classe madre di un altro oggetto.
E questo sta al programmatore decidere se permetterlo o meno. E il compilatore deve assicurare che il programma funzioni correttamente.
Questo è il punto, se questo caso molto diverso si presenta a voi, significa che la vostra architettura è concettualmente sbagliata e potenzialmente pericolosa.
In C++, il concetto delle cosiddette classi amichevoli è stato introdotto ad un certo punto in modo infelice. È come se una classe sapesse come è organizzata un'altra classe, può tranquillamente lavorare con i suoi dati interni. La pratica di usarlo da migliaia di programmatori in tutto il mondo ha dimostrato che è una cosa pericolosa, che crea più problemi che risolverli, quindi è stato abbandonato nei linguaggi moderni come Java e C#.
Questa caratteristica è stata spiacevolmente sorprendente. È sicuramente una stronzata se il compilatore permette di cambiare il campo privato dell'istanza di qualcun altro. Dovremmo inviarlo al Service Desk.
Non capisco: perché vuoi limitarti così tanto?
Pensate che renderà automaticamente più sicuro il vostro programma?
Non lo farà! Al contrario.
Sono le restrizioni inutili che ti faranno scrivere così un giorno:
Sapete una cosa o due sull'OOP, ma non lo capite ancora.
Guarda:
È sorprendente che io abbia chiuso la variabile "wallet", nonostante il fatto che l'idea originale della classe è di rendere il suo portafoglio disponibile a tutti? Ma se ognuno prende quanto vuole, perderemo soldi e questo è impossibile. Ora la funzione GetMoney lo permette, ma dopo aver aggiunto diverse linee, non permette di prendere la maggiore quantità di denaro che il portafoglio memorizza. Ora immaginate che la classe Mecenate sia avvicinata da decine di oggetti diversi che chiedono soldi. Se la variabile del portafoglio è aperta, allora ognuno di questi oggetti dovrebbe anche controllare (cioè avere la propria implementazione) per verificare se hanno abbastanza soldi. E se almeno uno di loro non lo fa, rischia di ottenere un valore negativo invece di zero, il che significherebbe che ha chiesto dei soldi e ha finito per essere in debito.Amico, vedo che conosci un po' di OOP, ma non ne hai ancora afferrato l'essenza.
Guarda:
È sorprendente che io abbia chiuso la variabile "borsa", nonostante il fatto che l'idea originale della classe è di rendere la sua borsa disponibile a tutti? Ma se ognuno prende quanto vuole, perderemo soldi e questo è impossibile. Ora la funzione GetMoney lo permette, ma dopo aver aggiunto qualche riga, non permette di prendere più soldi. Ora immaginate che la classe Mecenate sia raggiunta da decine di oggetti diversi che chiedono denaro. Se la variabile del portafoglio è aperta, allora ognuno di questi oggetti dovrebbe anche controllare (cioè avere la propria implementazione) per verificare se hanno abbastanza soldi. E se almeno uno di loro non lo fa, rischia di ottenere un valore negativo invece di zero, il che significherebbe che ha chiesto dei soldi e ha finito per essere in debito.Non avevo nulla contro il portafoglio privato. La conversazione è iniziata con questo:https://www.mql5.com/ru/forum/1111/page1072#comment_589657
Questo è corretto. La classe B accede alla classe A esterna e vuole che le variabili protette della classe A siano disponibili per lei. Non capisco la logica qui.
Cosa c'entra la logica?
http://alenacpp.blogspot.com/2006/03/blog-post_11.html
Il modificatore protetto è una puttana. Raramente è davvero necessario.
Il vero incapsulamento implica la privacy dei dati.
Puoi dirmi se vuoi selezionare il primo carattere in pos - devo mettere 1 o 0 in pos? È indicizzato come negli array?
Puoi dirmi se vuoi selezionare il primo carattere in pos - devo mettere 1 o 0 in pos? È indicizzato come negli array?