Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А почему тогда оператор сложения (в отличии от присваивания) возвращает не указатель? Ведь "перекинул и все дела"!
Вас действительно интересует этот вопрос, или лишь бы поговорить?
Да. Вот этот момент (о чём спросил A100) я и имел ввиду.
Тут я не могу "переварить".
Поясните, пожалуйста, как следует читать (понимать) такого рода записи.
Имею ввиду записи:
СMatrix operator+(const CMatrix &m);
//--- оператор умножения
CMatrix operator*(const CMatrix &m);
Здесь мы возвращаем объект?
Здесь мы возвращаем объект?
Да. Потому что в результате выполнения оператора создается новый объект. Если передавать его указатель, будут проблемы с удалением указателя.
А в операторе = возвращается указатель на существующий объект просто для того, чтобы можно было записать a = b = c = d = e;
Да. Вот этот момент (о чём спросил A100) я и имел ввиду.
Тут я не могу "переварить".
Поясните, пожалуйста, как следует читать (понимать) такого рода записи.
Имею ввиду записи:
СMatrix operator+(const CMatrix &m);
//--- оператор умножения
CMatrix operator*(const CMatrix &m);
Здесь мы возвращаем объект?
Это значит, что с переменными типа СMatrix можно производить арифметические действия + и *. Писать выражения типа var1=var2+var3. Где var1, var2, var3 объекты типа СMatrix.
В первом посте вы не весь код показали, где весь? Должен быть еще код выполнения этих действия.
Возвращают они объекты, потому-что работают совместно с оператором равенства "=".
Да. Потому что в результате выполнения оператора создается новый объект. Если передавать его указатель, будут проблемы с удалением указателя.
А в операторе = возвращается указатель на существующий объект просто для того, чтобы можно было записать a = b = c = d = e;
В документации https://docs.mql4.com/ru/basis/function написано, что
Вот и возник вопрос. Противоречие в документации?
Раз мы возвращаем из функции объект, а не указатель на него.
Вот ещё пример непонятного)
{
//--- переменная для получения значений из столбца
CRow row();
//--- количество строк в матрице
int rows=Rows();
//--- если количество строк больше нуля, выполняем операцию
if(rows>0)
{
//--- массив для получения значений столбца с индексом col_index
double array[];
ArrayResize(array,rows);
//--- заполнение массива
for(int i=0;i<rows;i++)
{
//--- проверка номера столбца для i-ой строки на выход за пределы массива
if(col_index>=this[i].Size())
{
Print(__FUNCSIG__,": Ошибка! Номер столбца ",col_index,"> размера строки ",i);
break; // row останется неинициализированным объектом
}
array[i]=this[i][col_index];
}
//--- создадим строку CRow на основе значений массива
row=array;
}
//--- результат
return(row); // Как? Почему это правильно? row создали в функции и потом его "вынули" из неё без передачи указателя
}
См. мой комментарий на предпоследней строчке.
Вот и возник вопрос. Противоречие в документации?
Получается да. Не в первый и думаю не в последний раз.
return(row); // Как? Почему это правильно? row создали в функции и потом его "вынули" из неё без передачи указателя
}
См. мой комментарий на предпоследней строчке.
В общем, с Вашей помощью разобрался.
Всем спасибо за помощь в понимании кода!