Errori, bug, domande - pagina 1057

 
Zloy_Koldun:

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#.

 
C-4:
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.
Guardano ai plus, ed è così anche lì.
 
Zloy_Koldun:

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:

///
/// Класс - меценат. Любой желающий может взять из его кошелька сколько хочет.
/// Если у нас монополия на меценатов, и он может быть только один, объявляем класс статическим
/// (на его работу это никак не повлияет).
///
class Меценат
{
    public:
      /// Отдает нужное количество денег
      int GetMoney(int СколькоДенегВзять)
      {
          кошелек -= СколькоДенегВзять;
          return СколькоДенегВзять;
      }
    private:
       int кошелек;
};
È 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.
 
C-4:

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 ho nulla contro un portafoglio privato. La conversazione è iniziata con questo:https://www.mql5.com/ru/forum/1111/page1072#comment_589657
 
Zloy_Koldun:
Non avevo nulla contro il portafoglio privato. La conversazione è iniziata con questo:https://www.mql5.com/ru/forum/1111/page1072#comment_589657
Proprio così. La classe B si riferisce alla classe A esterna e vuole che le variabili protette della classe A siano disponibili per essa. Dov'è la logica qui, non capisco.
 
C-4:
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.
Non ha niente a che vedere con la logica, vuole...!
 
MetaDriver:
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.

Права доступа при наследовании
  • 2006.03.11
  • alenacpp.blogspot.com
С правами доступа при наследовании довольно легко запутаться. Мало того, что для данных и функций класса в С++ есть целых три уровня доступа: , и , еще ведь можно и само наследование сделать , и . Самым загадочным их них является -наследование. Запутаться во всем этом зоопарке очень просто, поэтому я аккуратно расписала где какой уровень досупа...
 
Puoi dirmi se vuoi selezionare il primo carattere in pos - devo mettere 1 o 0 in pos? È indicizzato come negli array?
 
paladin800:
Puoi dirmi se vuoi selezionare il primo carattere in pos - devo mettere 1 o 0 in pos? È indicizzato come negli array?
Questo è facile da controllare: Stampa.
 
paladin800:
Puoi dirmi se vuoi selezionare il primo carattere in pos - devo mettere 1 o 0 in pos? È indicizzato come negli array?
Sì, da zero.