Erros, bugs, perguntas - página 1920

 
fxsaber:

O "antepassado" vê os campos protegidos/privados e não deve.

E campos públicos: deve/não deve?

Combinador:

Se acrescentarmos

estrutura B;

Sem efeito
 
A100:

E público: deve/não deve?

campo público estático - deve.
 
fxsaber:
O campo público estático é uma obrigação.
Para resumir: A classe base não vê o campo não estático do campo derivado. Ao mesmo tempo, a classe base não vê estática protegida da derivada, mas vê estática pública. Foi o senhor que inventou esta regra?
 
A100:
Para resumir: Uma classe base não vê campos não estáticos de uma derivada. Ao mesmo tempo, a classe base não vê estática protegida da derivada, mas vê estática pública. Foi o senhor mesmo que inventou esta regra?

É difícil para mim dizer onde são feitas tais generalizações. Eu próprio não tinha isso em mente de forma alguma.

Qualquer classe vê campos/métodos públicos estáticos de qualquer outra classe.

A classe base nunca vê campos/métodos de derivados (herança pública) protegidos/privados (estáticos - não importa).

Uma classe derivada(de herança pública) nunca vê campos/métodos privados de uma classe base, mas vê sempre protegidos/públicos.

 
fxsaber:

Qualquer classe vê os campos/métodos públicos estáticos de qualquer outra classe.

No fim de contas, a questão resume-se a isto: É correcto que na MQL, os campos/métodos públicos estáticos de uma classe derivada estão disponíveis numa classe base?
 
A100:
No final, a questão resume-se a isto: É correcto que os campos/métodos públicos estáticos de uma classe derivada estejam disponíveis em MQL?

Isto é correcto não só para o caso base/derivativo, mas para quaisquer classes em geral.

 
fxsaber:

Isto é correcto não só para o caso base/derivativo, mas para todas as classes em geral.

A questão não surgiu do nada

#ifdef __cplusplus
struct B;
struct A {
        int f() { return B::i; } //error E2451
};
struct B : A {
        static int i;
};
int B::i;
#endif
e, portanto, precisa de ser verificada em pormenor
 
fxsaber:

Qualquer classe vê campos/métodos públicos estáticos de qualquer outra classe.

... Incluindo a classe base. Daí a seguinte contradição no 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++ sem erros
 
A100:

Em C++ por defeito nas estruturas os membros são públicos, em mql privados, o mesmo que nas classes.

Sim, eu estava errado, falta a declaração em C++, precisamos de definição

 
A100:

... incluindo o básico. Daí a seguinte contradição no MQL

C++ sem erros

Sim, isto é um bug na herança privada MQL.