Errori, bug, domande - pagina 1920

 
fxsaber:

L'"antenato" vede i campi protetti/privati e non dovrebbe.

E i campi pubblici: si dovrebbe/non si dovrebbe?

Combinatore:

Se aggiungiamo

struttura B;

Nessun effetto
 
A100:

E pubblico: si dovrebbe/non si dovrebbe?

campo statico pubblico - deve.
 
fxsaber:
Il campo statico pubblico è un must.
Per riassumere: la classe base non vede il campo non statico della derivata. Allo stesso tempo, la classe base non vede protected static del derivato, ma vede public static. Hai inventato tu questa regola?
 
A100:
Per riassumere: una classe base non vede i campi non statici di una classe derivata. Allo stesso tempo, la classe base non vede protected static della derivata, ma vede public static. Hai inventato tu questa regola?

È difficile per me dire dove si fanno queste generalizzazioni. Io stesso non l'avevo in mente in nessun modo.

Qualsiasi classe vede campi/metodi statici pubblici di qualsiasi altra classe.

La classe base non vede mai i campi/metodi protetti/privati (statici - qualsiasi cosa) della classe derivata (eredità pubblica).

Una classe derivata(public-inheritance) non vede mai campi/metodi privati di una classe base, ma vede sempre protected/public.

 
fxsaber:

Qualsiasi classe vede campi/metodi statici pubblici di qualsiasi altra classe.

Alla fine, la questione si riduce a questo: È corretto che in MQL, i campi/metodi statici pubblici di una classe derivata sono disponibili in una classe base?
 
A100:
Alla fine, la questione si riduce a questo: È corretto che in MQL, la classe base ha campi/metodi statici pubblici di quella derivata?

Questo è corretto non solo per il caso base/derivata, ma per qualsiasi classe in generale.

 
fxsaber:

Questo è corretto non solo per il caso base/derivata, ma per tutte le classi in generale.

La questione non è sorta dal nulla

#ifdef __cplusplus
struct B;
struct A {
        int f() { return B::i; } //error E2451
};
struct B : A {
        static int i;
};
int B::i;
#endif
e quindi deve essere controllato in dettaglio
 
fxsaber:

Qualsiasi classe vede campi/metodi statici pubblici di qualsiasi altra classe.

... Compresa la classe base. Da qui la seguente contraddizione in 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++ senza errori
 
A100:

In C++ per default nelle strutture i membri sono pubblici, in mql privati, come nelle classi.

Sì, mi sono sbagliato, manca la dichiarazione in avanti in C++, abbiamo bisogno della definizione

 
A100:

... compreso quello di base. Da qui la seguente contraddizione in MQL

C++ senza errori

Sì, questo è un bug nell'ereditarietà privata di MQL.