Errores, fallos, preguntas - página 1057

 
Zloy_Koldun:

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

 
C-4:
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.
Están alineados con los pluses, y así es también allí.
 
Zloy_Koldun:

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:

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

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 una cartera privada. La conversación comenzó con esto:https://www.mql5.com/ru/forum/1111/page1072#comment_589657
 
Zloy_Koldun:
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
Así es. La clase B se refiere a la clase externa A y quiere que las variables protegidas de la clase A estén disponibles para ella. No entiendo dónde está la lógica aquí.
 
C-4:
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í.
No tiene nada que ver con la lógica. ¡Quiere...!
 
MetaDriver:
¿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.

Права доступа при наследовании
  • 2006.03.11
  • alenacpp.blogspot.com
С правами доступа при наследовании довольно легко запутаться. Мало того, что для данных и функций класса в С++ есть целых три уровня доступа: , и , еще ведь можно и само наследование сделать , и . Самым загадочным их них является -наследование. Запутаться во всем этом зоопарке очень просто, поэтому я аккуратно расписала где какой уровень досупа...
 
¿Puede decirme si quiere seleccionar el primer carácter en pos - debo poner 1 o 0 en pos? ¿Está indexado como en los arrays?
 
paladin800:
¿Puede decirme si quiere seleccionar el primer carácter en pos - debo poner 1 o 0 en pos? ¿Está indexado como en las matrices?
Esto es fácil de comprobar: Imprimir.
 
paladin800:
¿Puede decirme si quiere seleccionar el primer carácter en pos - debo poner 1 o 0 en pos? ¿Está indexado como en las matrices?
Sí, desde cero.