错误、漏洞、问题 - 页 1920

 
fxsaber:

祖先 "看到的是受保护的/私有的字段,而不应该看到。

而公共领域:应该/不应该?

组合器

如果我们加入

结构B;

没有影响
 
A100:

而公众:应该/不应该?

公共静态领域 - 必须。
 
fxsaber:
公共静态场是必须的。
总结一下:基类看不到派生类的非静态字段。同时,基类不会看到派生类的保护静态,而是看到公共静态。这个规则是你自己发明的吗?
 
A100:
总结一下:基类不会看到派生类的非静态字段。同时,基类不会看到派生类的保护性静态,而是看到公共静态。这个规则是你自己发明的吗?

我很难说这种概括是在什么地方做出的。我自己丝毫没有这个想法。

任何类都能看到任何其他类的公共静态字段/方法。

基类永远不会看到派生(公有继承)的受保护/私有(静态--无所谓)字段/方法。

派生类(公有继承)永远不会看到基类的私有字段/方法,而总是看到受保护的/公共的。

 
fxsaber:

任何类都能看到任何其他类的公共静态字段/方法。

最后,问题归结为这一点。在MQL中,派生类的公共静态字段/方法在基类中可用,这是否正确?
 
A100:
最后,问题归结为这一点。派生类的公共静态字段/方法在MQL中可用,这是否正确?

这不仅对基数/导数情况是正确的,而且对一般的任何类都是正确的。

 
fxsaber:

这不仅对基数/导数情况是正确的,而且对所有的类都是正确的。

这个问题并不是无中生有的

#ifdef __cplusplus
struct B;
struct A {
        int f() { return B::i; } //error E2451
};
struct B : A {
        static int i;
};
int B::i;
#endif
因此需要详细检查
 
fxsaber:

任何类都能看到任何其他类的公共静态字段/方法。

...包括基类。因此,在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++
 
A100:

在C++中,默认情况下,结构中的成员是公开的,在mql中是私有的,与类中的成员相同。

是的,我错了,C++中的正向声明是缺失的,我们需要定义

 
A100:

...包括基本的一个。因此,在MQL中存在以下矛盾

无错误的C++

是的,这是MQL私有继承中的一个错误。