Утилита Graphics editor MT4 предназначена для создания и редактирования графических объектов типа: Удобный и интуитивно понятный интерфейс позволяет быстро и эффективно редактировать основные параметры графических объектов и сразу же видеть результат изменений. Входные параметры Languages - русский/английский; base_corner - угол привязки...
Переопределение операторов ничего кроме синтаксического сахара не дает. Лучше отказаться от этой практики и вместо оператора присваивания использовать метод Copy() или Clone() - просто и понятно:
class CMyClass
{
private:
int m_state;
public:
CMyClass* Copy()
{
CMyClass* obj = new CMyClass();
obj.m_state = state;
return obj;
}
}
Василий спасибо за мнение. Пожалуй соглашусь с твоим подходом, с небольшим дополнением:
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//--- Объект 1
CMyClass my_obj1;
my_obj1.State(5);
PrintFormat("Состояние Объекта 1: %d",my_obj1.State());
//--- Объект 2 - методом клонирования
CMyClass *ptr_my_obj2;
ptr_my_obj2=my_obj1.Clone();
if(CheckPointer(ptr_my_obj2)==POINTER_DYNAMIC)
PrintFormat("Состояние Объекта 2: %d",ptr_my_obj2.State());
//--- Объект 3 - методом копирования
CMyClass my_obj3;
my_obj3.State(3);
PrintFormat("Состояние Объекта 3: %d",my_obj3.State());
if(my_obj1.Copy(my_obj3))
PrintFormat("Состояние Объекта 1: %d",my_obj1.State());
}
Стандартные символы сравнения лучше оставить за указателями.
Artyom Trishkin: Вы что-либо пояснили по вашей точке зрения? Нет.
Я удалил простую склоку.
Не буду поддаваться на провокации хейтеров, к тому же безграмотных, а лучше поясню свою точку зрения:
В нормальных языках программирования (не С++) перегрузка оператора '=' запрещена. А в некоторых перегрузка операторов запрещена практически полностью, т.к. совершенно заслужено там считается антипаттерном. Предлагаю желающим, прежде чем использовать любую подобную перегрузку, особенно оператор присваивания, хорошо подумать над тем, почему эти глупые архитекторы этих глупых языков так делают.
Не удержался, лично андрею: блин, ну не позорься так. Ведь откровенно глупые вещи морозишь: сначала про ФП, теперь про операторы. Хочешь похейтерить - welcome: приводи ссылки на авторитетные источники, обосновывай ну и т.д. А то, что ты делаешь сейчас это оголотелый и главное абсолютно безграмотный хейт. Ты ж вроде программист, вроде даже настоящий - стыдно уже такие вещи писать.
Артём, Вы не правы. Куда ж без девок? - Девки наше фсё :-))
А если серьёзно, то вот хочу что обсудить. Есть класс, где написан свой конструктор копирования и переопределён оператор присваивания. Вопрос. Когда они должны отличаться и должны ли?
Компилятор сам создаёт простой конструктор копирования, который просто копирует все члены класса или структуры.
Если нужно чтобы при копировании выполнялись ещё какие-то действия кроме этого, можно определить свой конструктор копирования
и оператор присваивания.
Оператор присваивания вызывается для существующего объекта, поэтому он должен сначала проверить не идет ли присваивание
самого себя, потом, при необходимости, освободить существующий объект, а потом делать то же, что и конструктор.
Где идет во всю ?
Почту проверьте.
Але, модераторы! Я задал нормальный вопрос, на который получил хамство, если уж сносите, то бред про операторы и указатели сносите тоже.
И не давайте соколову вообще появляться в темах про ООП, с такими защитниками ООП на форуме загнется в муках
Але, модераторы! Я задал нормальный вопрос, на который получил хамство, если уж сносите, то бред про операторы и указатели сносите тоже.
И не давайте соколову вообще появляться в темах про ООП, с такими защитниками ООП на форуме загнется в муках
Хороший пример на тему ООП.
Вы что-либо пояснили по вашей точке зрения? Нет.
Переопределение операторов ничего кроме синтаксического сахара не дает. Лучше отказаться от этой практики и вместо оператора присваивания использовать метод Copy() или Clone() - просто и понятно:
Василий спасибо за мнение. Пожалуй соглашусь с твоим подходом, с небольшим дополнением:
Проверочный скрипт:
Стандартные символы сравнения лучше оставить за указателями.
Что значит за указателями? В таком смысле?
О господи...
Вы что-либо пояснили по вашей точке зрения? Нет.
Не буду поддаваться на провокации хейтеров, к тому же безграмотных, а лучше поясню свою точку зрения:
В нормальных языках программирования (не С++) перегрузка оператора '=' запрещена. А в некоторых перегрузка операторов запрещена практически полностью, т.к. совершенно заслужено там считается антипаттерном. Предлагаю желающим, прежде чем использовать любую подобную перегрузку, особенно оператор присваивания, хорошо подумать над тем, почему эти глупые архитекторы этих глупых языков так делают.
Не удержался, лично андрею: блин, ну не позорься так. Ведь откровенно глупые вещи морозишь: сначала про ФП, теперь про операторы. Хочешь похейтерить - welcome: приводи ссылки на авторитетные источники, обосновывай ну и т.д. А то, что ты делаешь сейчас это оголотелый и главное абсолютно безграмотный хейт. Ты ж вроде программист, вроде даже настоящий - стыдно уже такие вещи писать.
Артём, Вы не правы. Куда ж без девок? - Девки наше фсё :-))
А если серьёзно, то вот хочу что обсудить. Есть класс, где написан свой конструктор копирования и переопределён оператор присваивания. Вопрос. Когда они должны отличаться и должны ли?
Компилятор сам создаёт простой конструктор копирования, который просто копирует все члены класса или структуры.
Если нужно чтобы при копировании выполнялись ещё какие-то действия кроме этого, можно определить свой конструктор копирования
и оператор присваивания.
Оператор присваивания вызывается для существующего объекта, поэтому он должен сначала проверить не идет ли присваивание
самого себя, потом, при необходимости, освободить существующий объект, а потом делать то же, что и конструктор.