错误、漏洞、问题 - 页 1696

 
Stanislav Korotky:

首先,我们不清楚是否试图将该方法声明为虚拟。如果它必须是虚拟的,那么就在基类中写上虚拟,而不是在派生类中写上虚拟(因为否则即使你把派生类的实例放进去,基类指针也会被扯到基类方法中)。

如果你不想在派生类中覆盖一个方法,就根本不要提它,如果你要提,就应该用主体来覆盖。

最后,为了将该方法从派生类中隐藏起来,你需要引入一个中间类,将该方法移到优先区域,或者在基类中使其成为私有的(但那样的话,为什么它是虚拟的?)

下面是一个例子

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class roditel
  {
public:

   virtual int one(void)
     {
      return 1;
     }
   virtual int two(void)
     {
      return 2;
     }
   virtual int three(void)
     {
      return 3;
     }
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class naslednic_1 : public roditel
  {
public:
   virtual int       two(void);
   virtual int       three(void);
  };

naslednic_1 go;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   go.two();
// 'two' - function must have a body    TEst.mq4        42      7
  }
//+------------------------------------------------------------------+
 
Vladimir Pastushak:

下面是一个例子

这个例子和第一个例子差不多;-)。你打开了我的信,但还没有读?你想通过在子代中重新声明方法而不定义它们来达到什么目的?要调用基本的实现而没有新的实现,你不需要在后裔中提到它们。
 
Stanislav Korotky:
这个例子和第一个例子差不多;-)。我的信被打开了,但你没有读?你想通过在子代中重新声明方法,但不定义它们来达到什么目的?要调用一个基本的实现而没有新的实现,你不需要在子代中声明它们。

我只想看到10个继承的方法 和在后代类中创建的方法。 我不需要190个方法,它们与当前类没有任何关系。

例如,我有一个基类,其中描述了所有形状的最大属性,宽度、高度、角、半径、颜色、面积。

基于这些属性方法,我做了一个子类,使用父类的方法,半径、颜色、面积......。但我在这里不需要拐角和宽度......。

基于这些方法,我做了一个后裔三角形类,使用父类的方法,颜色、面积、角......。但我这里不需要半径......。

当我问及原因时,父类有一组方法是所有的或一组形状所共有的,如颜色、样式方法。

 
Vladimir Pastushak:

我只想看到10个继承的方法 和在后代类中创建的方法。 我不需要190个方法,它们与当前类没有任何关系。

例如,我有一个基类,其中描述了所有形状的最大属性,宽度、高度、角、半径、颜色、面积。

基于这些属性方法,我做了一个圆的派生类,使用父类的方法,半径、颜色、面积......。但我在这里不需要拐角和宽度......。

基于这些方法,我做了一个后裔三角形类,使用父类的方法,颜色、面积、角......。但我这里不需要半径......。

当我问及原因时,父类有一组方法是所有的或一组形状所共有的,例如,方法颜色、样式。

我不明白:这个问题--是一个问题还是一个承上启下的答案?通常他们是这样做的--在基类中是普通的,然后在子类中增加特殊的内容。为什么反过来做呢?目的是什么?

但是,即使你不深入研究,我已经建议了一个选项--插入一个中间的子代,其中所有不必要的属性和方法都被移到私有部分。

 
向行政部门提问,什么时候可以看到新的最新的服务统计数据?
 
Vladimir Pastushak:

父类中有200个方法,我只想看到10个继承的方法 加上子类中创建的方法,我不需要再有190个与当前类无关的方法。

要做到这一点,你需要将继承声明为保护或私有。 然后覆盖你需要的方法。

class naslednic_1 : protected roditel
  {
public:
   virtual int       two(void)   { return roditel::two(); }
   virtual int       three(void) { return roditel::three(); }
  };
 
Alexey Navoykov:

要做到这一点,你需要将继承声明为保护或私有。 然后覆盖你想要的方法。

斯坦尼斯拉夫-科罗茨基

我不明白:这个问题是一个问题还是一个不完整的答案?通常他们是这样做的--在基类中是一般的,然后在子类中增加特殊的内容。为什么要做相反的事?目的是什么?

但是,即使你不太深入,我已经建议了一个选项--插入一个中间的子代,其中所有不必要的属性和方法都被移到私有部分。

谢谢你。

Alexey,你的例子不起作用,在任何情况下,孩子都会得到父母的方法,这些方法不应该被甩掉。


 
我如何知道我的INDICATOR_SHORTNAME?IndicatorGet*-functions缺失!
 
Alexey Kozitsyn:
如果你在创建时改变了短名称怎么办?

而且每次都有变化?

如果指标包含指标缓冲区,自我识别就很容易,但如果没有缓冲区,我还没有看到解决方案。

 
fxsaber:
我如何知道我的INDICATOR_SHORTNAME?IndicatorGet*-functions不存在!
Print(MQLInfoString(MQL_PROGRAM_NAME)); 返回指标短名称。如果没有指定短名,则返回全名。
原因: