任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 634

 

谁有一个例子的代码,其中字符串数组的元素 是按字母顺序分组的?

提前感谢。

 
Hobu:

这里

https://docs.mql4.com/ru/basis/operators/return

它说。

"你可以返回简单的类型简单的结构,以及指向对象的指针 返回操作符 不能返回任何数组、类对象或复杂结构类型的变量

"

这看起来是所需要的吗?

使用的是俄罗斯标识符,所以看起来有点不寻常。

#property strict

/******************************************************************************/
struct ОфигеннаяСтруктура {
private:
  int значение;

public:
  ОфигеннаяСтруктура(int значение = 0): значение(значение) { }
  int выдатьЗначение() const { return значение; }
};

/******************************************************************************/
ОфигеннаяСтруктура Функа(int значение) {
  ОфигеннаяСтруктура местная(значение);

  return местная; // Возвращаем структуру из функции
}

/******************************************************************************/
void OnStart() {
  Print("Начинаем безобразничать...");

  ОфигеннаяСтруктура штукаРаз = Функа(5);

  Print("Значение штукиРаз = ", штукаРаз.выдатьЗначение());

  ОфигеннаяСтруктура штукаДва;

  Print("Значение штукиДва первое = ", штукаДва.выдатьЗначение());
  штукаДва = Функа(7);
  Print("Значение штукиДва второе = ", штукаДва.выдатьЗначение());

  Print("Заканчиваем безобразничать...");
}

运行的结果如下。

23:55:39 Script 1 EURUSDm,H1: loaded successfully
23:55:39 1 EURUSDm,H1: initialized
23:55:39 1 EURUSDm,H1: Начинаем безобразничать...
23:55:39 1 EURUSDm,H1: Значение штукиРаз = 5
23:55:39 1 EURUSDm,H1: Значение штукиДва первое = 0
23:55:39 1 EURUSDm,H1: Значение штукиДва второе = 7
23:55:39 1 EURUSDm,H1: Заканчиваем безобразничать...
23:55:39 1 EURUSDm,H1: uninit reason 0
23:55:39 Script 1 EURUSDm,H1: removed
thingRaz对象被初始化为从Funk函数返回的对象(结构),而thingTwo对象被初始化为默认值,但随后一个对象(结构)被分配给它,也从Funk函数返回。
 
simpleton:

这看起来是正确的事情吗?

使用了俄罗斯的标识符,所以看起来有点不寻常。

运行的结果如下。

thingRaz对象被初始化为从Funk函数返回的对象(结构),而thingTwo对象被初始化为默认值,但随后一个同样从Funk函数返回的对象(结构)被分配给它。

 

请你详细评论一下那个傻瓜 描述的方式,每一行包括语法?我还不明白这意味着什么。不一定在手指上,你也可以使用术语,但要逐行使用。

1)那么,Funk的函数是否像其他平庸的函数那样,返回一个对象而不是一些平庸的值?这是什么样的野兽,为什么它是一个物体?

2)我们能否用函数返回的对象或默认值进行初始化?也就是说,Funk函数虽然是同一结构的一部分,但与对象Thing 2没有任何关系,还是我理解错了?顺便说一下,它被称为对象,那么结构也有一个对象?我以为比这更简单。还有一个问题,如果一个结构的类型相同,我究竟如何将它们复制到另一个结构?这句简单的话。

ОфигеннаяСтруктура штукаДва;

并有一个臭名昭著的抄袭?而且没有必要单独声明Stuka 2的结构,它根本就不是一个结构,而是一个由结构创建的对象?

我对任何编程语言都不熟悉(但不反对学习),此外,对OOP的概念也比较模糊,所以如果问题很愚蠢,请不要惊讶。

哎呀,我刚才看到,大括号之前是封闭的,也就是说,这个Funka是在结构之外描述的,但它与结构的关系到底是什么呢?

 
Hobu:

请你详细评论一下那个傻瓜 描述的方式,每一行包括语法?我还不明白这意味着什么。不一定在手指上,你也可以使用术语,但要逐行使用。

1)那么,Funk的函数是否像其他平庸的函数那样,返回一个对象而不是一些平庸的值?这是什么样的野兽,为什么它是一个物体?

2)我们能否用函数返回的对象或默认值进行初始化?也就是说,Funk函数虽然是同一结构的一部分,但与对象Thing 2没有任何关系,还是我理解错了?顺便说一下,它被称为对象,那么结构也有一个对象?我以为比这更简单。还有一个问题,如果一个结构是同一类型的,到底如何才能复制到另一个结构中去?这句简单的话。

还有就是臭名昭著的抄袭?而且你不必单独声明2型结构,它根本不是一个结构,而是一个由结构创建的对象?

我对任何编程语言都不熟悉(但不反对学习),而且对OOP的概念相当模糊,所以如果问题很愚蠢,请不要惊讶。

哎呀,我刚才看到前面的大括号是封闭的,也就是说,这个函数是在结构之外描述的,但它与结构的关系到底是什么呢?

类似这样的事情,与同样的事情相比,但对于一个内置类型的变量。
#property strict

/******************************************************************************/
struct ОфигеннаяСтруктура { // Заводим структуру
private: // Просто так извне к следующим элементам нельзя обратиться
  int значение; // Поле данных для хранения в структуре

public: // К следующим элементам можно просто так обратиться извне
  ОфигеннаяСтруктура(int значение = 0): значение(значение) { } // Конструктор: инициализирует поле значением переданного параметра; если параметр не передан, используется значение по умолчанию, равное 0
  int выдатьЗначение() const { return значение; } // Метод: возвращает значение поля, может вызываться для структур, переменные для которых объявленных как константные
};

/******************************************************************************/
ОфигеннаяСтруктура Функа1(int значение) { // Функция, возвращающая структуру
  ОфигеннаяСтруктура местная(значение); // Создание локальной переменной, в данном случае, судя по типу, это - структура

  // Если структура посложнее, чем в этом примере, то тут можно выполнить над ней какие-то дополнительные действия

  return местная; // Возвращаем структуру из функции
}

/******************************************************************************/
string Функа2(int значение) { // Функция, возвращающая один из встроенных типов
  string Таблица[] = {"Ноль", "Один", "Два"};

  /* Никакого особого смысла тут нет, просто имитация деятельности */
  return Таблица[значение % 3]; // Возвращаем строку из функции (остаток от деления параметра на три словами)
}

/******************************************************************************/
void OnStart() {
  Print("Начинаем безобразничать...");

  ОфигеннаяСтруктура штукаРаз = Функа1(5); // Заводим переменную (структуру) с одновременной инициализацией
  string строкаРаз = Функа2(5); // Заводим переменную (один из встроенных типов) также с инициализацией

  Print("Значение штукиРаз = ", штукаРаз.выдатьЗначение()); // Для получения значения поля структуры вызывается специально под это написанный метод
  Print("Значение строкиРаз = ", строкаРаз);

  ОфигеннаяСтруктура штукаДва; // Заводим переменную (структуру) без явной инициализации (конструктор получает в качестве значения параметра значение, указанное по умолчанию, и структура инициализируется им)
  string строкаДва; // Заводим переменную (один из встроенных типов) без инициализации (переменные типа string, объявленные таким образом, инициализируются пустой строкой)

  Print("Значение штукиДва первое = ", штукаДва.выдатьЗначение());
  Print("Значение строкиРаз первое = '", строкаРаз, "'");

  штукаДва = Функа1(7); // Присвоение переменной штукаДва типа структура значения типа структура, возвращённого функцией Функа1
  строкаДва = Функа2(7); // Присвоение переменной строкаДва одного из встроенных типов (строка) значения того же типа, возвращённого функцией Функа2

  Print("Значение штукиДва второе = ", штукаДва.выдатьЗначение());
  Print("Значение строкиРаз второе = '", строкаРаз, "'");

  Print("Заканчиваем безобразничать...");
}

运行的结果如下。

21:16:29 Script 1 EURUSDm,H1: loaded successfully
21:16:29 1 EURUSDm,H1: initialized
21:16:29 1 EURUSDm,H1: Начинаем безобразничать...
21:16:29 1 EURUSDm,H1: Значение штукиРаз = 5
21:16:29 1 EURUSDm,H1: Значение строкиРаз = Два
21:16:29 1 EURUSDm,H1: Значение штукиДва первое = 0
21:16:29 1 EURUSDm,H1: Значение строкиРаз первое = ''
21:16:29 1 EURUSDm,H1: Значение штукиДва второе = 7
21:16:29 1 EURUSDm,H1: Значение строкиРаз второе = 'Один'
21:16:29 1 EURUSDm,H1: Заканчиваем безобразничать...
21:16:29 1 EURUSDm,H1: uninit reason 0
21:16:29 Script 1 EURUSDm,H1: removed

函数返回声明中指定类型的对象。这里的对象不仅是指结构,也包括内置类型。

如果Funk1函数的返回值的类型是OffigenStructure类型,也就是结构,那就意味着这个函数返回的是结构的值,而且只是OffigenStructure类型。它之所以这样做,是因为而且仅仅是因为它的声明/定义有这种返回类型。

你可以用这样的值来初始化它,就像其中一个构造函数一样。没有构造函数也可以工作,但有不同的初始化语法和限制。

在这种情况下,构造函数需要一个int类型的值,所以OxygenStructure类型的变量应该用int类型的值来初始化,或者用另一种类型,但隐含地铸成int。

由于默认值是为构造函数所接受的参数所指定的,所以你不必向构造函数传递一个值。反正构造函数会被调用,但会使用默认参数。

这一行并不复杂,只是声明了一个Structure类型的变量。将相同类型的结构相互复制是非常容易的,就像 "复制 "一个内置类型变量的值一样。你需要从一个变量向另一个变量赋值。例如,"thingRaz = thingTwo;"。自己执行它,并打印出变量shtuRaz在这次赋值后的数值。

Funk1与typeOfgenericStructure的结构没有任何关系,只是它返回该类型的值。

你需要一般的训练,没有训练你会 "淹死"。我还没准备好给你建议。

我可以根据我所看到的情况(基本情况)简要地给你以下建议。

1.程序中的数据被存储在内存的指定区域,称为变量。

2. 变量的类型定义了对存储数据的解释方式,在绝大多数情况下,定义了其大小。解释的方式意味着可以对数据进行一系列的操作。

3.从这个角度来看,嵌入式类型和结构化类型在概念上并无不同。

第2点是最重要和最基本的理解。在C++和MQL中,类型的概念是非常重要的。

简而言之:类型是数据的一个 "模式",而变量是该模式的一个单元。一只猫或一只狗是一个 "模式",而具体的猫如Murzyk或狗如Sharik是猫和狗的单位。类型和变量的情况也是如此。

 
Hobu:

请你详细评论一下那个傻瓜 描述的方式,每一行包括语法?我还不明白这意味着什么。不一定在手指上,你也可以使用术语,但要逐行使用。

1)那么,Funk的函数是否像其他平庸的函数那样,返回一个对象而不是一些平庸的值?这是什么样的野兽,为什么它是一个物体?

2)我们能否用函数返回的对象或默认值进行初始化?也就是说,Funk函数虽然是同一结构的一部分,但与对象Thing 2没有任何关系,还是我理解错了?顺便说一下,它被称为对象,那么结构也有一个对象?我以为比这更简单。还有一个问题,如果一个结构的类型相同,我究竟如何将它们复制到另一个结构?这句简单的话。

并有一个臭名昭著的抄袭?而且没有必要单独声明Stuka 2的结构,它根本就不是一个结构,而是一个由结构创建的对象?

我对任何编程语言都不熟悉(但不反对学习),此外,对OOP的概念也比较模糊,所以如果问题很愚蠢,请不要惊讶。

哎呀,我刚才看到,大括号之前是封闭的,也就是说,这个Funka是在结构之外描述的,但它与结构的关系到底是什么呢?


塔尔图?嗯哼...
 

老伙计们,告诉我如何计算二维数组中的填充单元格数量。

 for(int i=0;i<ObjectsTotal();i++) 
{
  mas[0][i]-количество заполненных ячеек?
  mas[1][i]-//-//-//-//-//-//-//-//-//-
}
 

请帮助我编写代码,以便在图表上只显示一个数字--损失水平,如果不是很难。

在这里,它在这个扩展好https://www.mql5.com/ru/code/8873,所以它被称为梅花的水平,它显示为红色,虽然也是保证金的水平是一个正常的话题,但至少那一个开始,否则,扩展是很酷,但有很多东西,我不需要,我不能理解它是如何获得有。

 
Top2n:

老伙计们,告诉我如何计算二维数组中的填充单元格数量。


ArrayRange
 
r772ra:

ArrayRange


该函数返回数组中的单元格数量,而不是填充单元格的数量。

谁能告诉我如何做一维?))