Errores, fallos, preguntas - página 1057
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
La cartera es sólo un caso especial. Y nadie impide que se coloque en la parte privada.
En otro caso, puede que necesites acceder a la variable de la clase padre del objeto de otra persona.
Y esto lo decide el programador si lo permite o no. Y el compilador debe garantizar que el programa funcione correctamente.
Esa es la cuestión, si este caso tan diferente te ocurre, significa que tu arquitectura es conceptualmente errónea y potencialmente peligrosa.
En C++, el concepto de las llamadas clases amigables se introdujo en algún momento de forma desafortunada. Es como si una clase supiera cómo está organizada otra clase, puede trabajar con seguridad con sus datos internos. La práctica de su uso por parte de miles de programadores de todo el mundo ha demostrado que es algo peligroso, que crea más problemas que los resuelve, por lo que se abandona en lenguajes modernos como Java y C#.
Esta característica fue desagradablemente sorprendente. Definitivamente es una mierda que el compilador permita cambiar el campo privado de una instancia ajena. Deberíamos publicarlo en el Servicio de Atención al Cliente.
No entiendo: ¿por qué quieres limitarte tanto?
¿Cree que esto hará que su programa sea automáticamente más seguro?
No lo hará. Al contrario.
Son las restricciones innecesarias las que harán que algún día lo escribas así:
Sabes un par de cosas sobre OOP, pero aún no lo entiendes.
Mira:
¿Es sorprendente que haya cerrado la variable "cartera", a pesar de que la idea original de la clase es poner su cartera a disposición de todos? Pero si cada uno se lleva todo lo que quiere, perderemos dinero y eso es imposible. Ahora la función GetMoney lo permite, pero después de añadir algunas líneas, no permite tomar más dinero. Ahora imagina que a la clase Mecenas acceden decenas de objetos diferentes pidiendo dinero. Si se abre la variable del monedero, entonces cada uno de estos objetos también tendría que controlar (es decir, tener su propia implementación) para comprobar si tienen suficiente dinero. Y si al menos uno de ellos no lo hace, se arriesga a obtener un valor negativo en lugar de cero, lo que significaría que pidió dinero y acabó debiendo dinero también.Amigo, veo que sabes un par de cosas sobre OOP, pero aún no has captado su esencia.
Mira:
¿Es sorprendente que haya cerrado la variable "monedero", a pesar de que la idea original de la clase es poner su monedero a disposición de todos? Pero si cada uno se lleva todo lo que quiere, perderemos dinero y eso es imposible. Ahora la función GetMoney lo permite, pero después de añadir algunas líneas, no permite tomar más dinero. Ahora imagina que a la clase Mecenas se le acercan decenas de objetos diferentes pidiéndole dinero. Si se abre la variable del monedero, entonces cada uno de estos objetos también tendría que controlar (es decir, tener su propia implementación) para comprobar si tienen suficiente dinero. Y si al menos uno de ellos no lo hace, se arriesga a obtener un valor negativo en lugar de cero, lo que significaría que pidió dinero y acabó debiendo dinero también.No tengo nada en contra de la cartera privada. La conversación comenzó con esto:https://www.mql5.com/ru/forum/1111/page1072#comment_589657
Esto es correcto. La clase B accede a la clase externa A y quiere que las variables protegidas de la clase A estén disponibles para ella. No entiendo la lógica aquí.
¿Qué tiene que ver la lógica con esto?
http://alenacpp.blogspot.com/2006/03/blog-post_11.html
El modificador protegido es una puta. Rara vez es realmente necesario.
La verdadera encapsulación implica la privacidad de los datos.
¿Puede decirme si quiere seleccionar el primer carácter en pos - debo poner 1 o 0 en pos? ¿Está indexado como en las matrices?
¿Puede decirme si quiere seleccionar el primer carácter en pos - debo poner 1 o 0 en pos? ¿Está indexado como en las matrices?