Errores, fallos, preguntas - página 1920

 
fxsaber:

El "ancestro" ve los campos protegidos/privados y no debería.

Y los campos públicos: ¿deben/no deben?

Combinador:

Si añadimos

estructura B;

Sin efecto
 
A100:

Y el público: ¿debe/no debe?

campo público estático - must.
 
fxsaber:
El campo estático público es imprescindible.
Resumiendo: La clase base no ve el campo no estático de la derivada. Al mismo tiempo, la clase base no ve protected static del derivado, sino que ve public static. ¿Inventaste esta regla tú mismo?
 
A100:
Resumiendo: Una clase base no ve los campos no estáticos de una derivada. Al mismo tiempo, la clase base no ve protected static de la derivada, sino que ve public static. ¿Inventaste esta regla tú mismo?

Me resulta difícil decir dónde se hacen esas generalizaciones. Yo mismo no tenía eso en mente de ninguna manera.

Cualquier clase ve los campos/métodos estáticos públicos de cualquier otra clase.

La clase base nunca ve los campos/métodos protegidos/privados (estáticos - no importa) de la derivada (herencia pública).

Una clase derivada(herencia pública) nunca ve los campos/métodos privados de una clase base, pero siempre ve los protegidos/públicos.

 
fxsaber:

Cualquier clase ve los campos/métodos estáticos públicos de cualquier otra clase.

Al final, la cuestión se reduce a esto: ¿Es correcto que en MQL los campos/métodos estáticos públicos de una clase derivada estén disponibles en una clase base?
 
A100:
Al final, la cuestión se reduce a esto: ¿Es correcto que en MQL, la clase base tiene campos/métodos estáticos públicos de la derivada?

Esto es correcto no sólo para el caso de la base/derivada, sino para cualquier clase en general.

 
fxsaber:

Esto es correcto no sólo para el caso de la base/derivada, sino para todas las clases en general.

La cuestión no surgió de la nada

#ifdef __cplusplus
struct B;
struct A {
        int f() { return B::i; } //error E2451
};
struct B : A {
        static int i;
};
int B::i;
#endif
y, por lo tanto, hay que comprobarlo en detalle
 
fxsaber:

Cualquier clase ve los campos/métodos estáticos públicos de cualquier otra clase.

... Incluyendo la clase base. De ahí la siguiente contradicción en MQL

struct A {
        static int i;
};
int A::i;
struct B : private A {};
struct C : B {
        C() { Print( A::i ); } //error: 'i' - private member access error
};
C++ sin errores
 
A100:

En C++ por defecto en las estructuras los miembros son públicos, en mql privados, igual que en las clases.

Sí, me equivoqué, falta la declaración forward en C++, necesitamos la definición

 
A100:

... incluyendo la básica. De ahí la siguiente contradicción en MQL

C++ sin errores

Sí, se trata de un error en la herencia privada de MQL.