MQL5中的OOP问题 - 页 57

 
Dmitry Fedoseev:

从C2到X的通道在哪里?
同样,一个嵌套的类只是一个创建对象 的类可见性问题。一个C2类的对象只能在C1类内创建。这就是全部。这是与写类型的唯一区别。
但你肯定会把别的东西称为嵌套类?告诉我们什么。

这是关于以下内容。

关于交易、自动交易系统和交易策略测试的论坛

虫子、虫子、问题

Vladimir Simakov, 2020.05.16 21:11

class Originator
  {
   int               state;
public:
   class Memento;
   Originator() : state(0){}
   Memento*          getMemento()      {return new Memento(&this);}
   void              setState(int s)   {state=s;}
   void              dumpState()       {printf("State: %i", state);}
///////////////////////////////////////////////////////////
   class Memento{
      int            state;
      Originator*    org;
      public:
                     Memento(Originator* mOrg):state(mOrg.state),org(mOrg){}
      void           restoreState() {org.state=state;}
   };
///////////////////////////////////////////////////////////
  };

为什么没有错误:不能访问私人成员?
答案:因为Memento 一个相对于Originator的Nested/Internal类

 
Sergey Dzyublik:

我们正在谈论以下问题。

对其他类的字段的访问在哪里?

 
Dmitry Fedoseev:

对其他类的字段的访问在哪里?

你在开玩笑吧,该帖子的作者用黄色强调了它,让有天赋的人...

 
Sergey Dzyublik:

你在开玩笑吧,该帖子的作者特别用黄色强调了它,以便让有天赋的人...

我明白了,只是我不认为他是昨天。https://www.mql5.com/ru/forum/85652/page48#comment_16405154,但这位同志是你们俱乐部的...所以它是好的,对吗?

我甚至会拍一张截图作为纪念。

123

 
Dmitry Fedoseev:

我明白了,只是我不认为他昨天是这样的。https://www.mql5.com/ru/forum/85652/page48#comment_16405154,但这个家伙是你的俱乐部的...所以它是好的,对吗?

我甚至会拍一张截图作为纪念。

你的精神状态还好吗?
你被引导到一个特定的帖子,有一个分配,你是哑巴,但你甚至不能接受,并提到一个完全不同的主题的晦涩的帖子,只是为了以某种方式证明自己......
好运...

 
Sergey Dzyublik:

你的精神状态还好吗?
你被引导到一个特定的帖子,有一个分配,你是哑巴,但你甚至不能接受它,并提到一个完全不同主题的晦涩的帖子,只是为了莫名其妙地证明自己......
好运...

我指的是同一个主题的帖子,也就是开始这整个讨论的帖子。你没看到这个帖子是哪个主题的吗?那么问题来了,也许你的心理有问题?

而且不是哑巴吃黄连,而是有苦说不出。但你从哪里得到这个帖子的--这很有趣。

请注意,那篇文章的作者昨天才发现这是有可能的。他发现了这一点,但没有意识到,这就是为什么他后来在这个主题中写了毫无意义的例子。那位专家在哪里看?

 
从Igor给出的ru.wikipedia.org/wiki/keeper_(template_projecting)那个维基百科链接中看到的代码也同样有趣。第一个例子是针对Java的。为什么你需要一个看守班的垫圈在那里?只是为了自作聪明?从本质上讲,这一切都归结为使用一个额外的结构和两个方法--任何白痴,甚至从未听说过伟大的神圣的设计模式,都会这样做,但没有不必要的铺垫,甚至没有意识到他属于 "伟大的知识"。
 
很久以前,我在一次求职面试中被问到什么是物体。我回答说--一套方法,并立即被录用。然后我被告知,其他候选人开始谈论猫、它们的爪子、狗和其他写在儿童编程书中的东西
 
Evgeniy Zhdan:
很久以前,我在一次面试中被问到什么是物体。我回答说--有一套方法,我马上就被录用了。然后我被告知,其他候选人开始讲述猫、它们的爪子、狗和其他儿童书籍中写到的关于编程的东西

为什么你的故事具有指导意义? 每个人都是这样得到工作的--你必须在正确的时间出现在正确的地点,这就是全部...当时有一个纽扣员的空缺,所以他们雇用了你。)

还是你当时有什么外国证书?)


ZS:你为什么工作?成本大吗?- 你有一张平均10-30万卢布的EA支票,在我看来应该至少够一个月的))))。


UPD:我有一种感觉,我是一个不情愿的怪胎秀的参与者,这是不对的(())。

 

让我解释一下。

在mql5中,嵌套类以及pluses是外部类的朋友(顺便说一下,这是我不知道的一点)。 但是在mql4中它没有实现,你必须在那里写拐杖。也就是说,这段代码在mql5中会正确编译,但在mql4中会导致编译错误

class Originator
  {
   int               state;
public:
   class Memento;
   Originator() : state(0){}
   Memento*          getMemento()      {return new Memento(&this);}
   void              setState(int s)   {state=s;}
   void              dumpState()       {printf("State: %i", state);}
///////////////////////////////////////////////////////////
   class Memento{
      int            state;
      Originator*    org;
      public:
                     Memento(Originator* mOrg):state(mOrg.state),org(mOrg){}
      void           restoreState() {org.state=state;}
   };
///////////////////////////////////////////////////////////
  };

当然,他们会写信给我说这不是C++,但我还是要打一个比方。

我不记得在官方的mql文档中有关于嵌套类的内容,以及从它访问外部字段的特殊性。 因此,这一切让我想到了UB。是的,它是有效的,但在相关信息出现在文档中之前,为它打基础,是一种自己的风险。