2016.09.12 15:49:14.209 Simple_Test (RTS-9.16,M1) array out of range in 'Simple_Test.mqh' (85,33)
неуклюже лезу в указанное место исходника. Было бы удобно, чтобы из журнала по двойному щелчку на таком сообщении можно было сразу попасть на указанную строчку.
Классика же - интерфейс в базовом классе с переопределением в потомках:
Классика - это когда protected/public-виртуальные методы переопределяются. А вот для private - не так очевидно (в смысле применения). Спасибо, что ответили.
fxsaber: Классика - это когда protected/public-виртуальные методы переопределяются. А вот для private - не так очевидно (в смысле применения). Спасибо, что ответили.
Да, я уже удалил свой пример, не видя вашего ответа, он действительно неудачным был.
Upd. Что-то я сам в азах запутался, пока вам отвечал. Всё правильно было в том примере, зря удалил. Ещё раз он же с примером использования:
class CAnimal
{
private:
voidvirtual Speak(){}
};
class CDog : public CAnimal
{
public:
void Speak(){Print("Гав!");}
};
class CBigDog : public CDog
{
public:
void Speak(){Print("Громкий гав!");}
};
voidOnStart()
{
CDog oDog;
oDog.Speak();
CBigDog oBigDog;
oBigDog.Speak();
CDog* pDog = &oBigDog;
pDog.Speak(); // "Громкий гав!", а не "Гав!", как было бы без виртуального метода
}
fxsaber: Не хороший пример, т.к. нигде не видно использование интерфейса CAnimal. Да еще двух потомков сделали public. Тему понимаю, так что норм.
Нормальный пример. Абстрактное животное в принципе какой-то звук издаёт, но неопределённый, поэтому у него метод Speak() вызывать нельзя, его можно вызвать только у животного конкретного вида. Поэтому в базовом классе объявляем закрытый виртуальный метод, а в потомках переопределяем его и открываем.
Нормальный пример. Абстрактное животное в принципе какой-то звук издаёт, но неопределённый, поэтому у него метод Speak() вызывать нельзя, его можно вызвать только у животного конкретного вида. Поэтому в базовом классе объявляем закрытый виртуальный метод, а в потомках переопределяем его и открываем.
Хорошо бы в потомках его тоже сделать private. Для лучшего понимания. Не суть, короче.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
В журнале терминала получаю
неуклюже лезу в указанное место исходника. Было бы удобно, чтобы из журнала по двойному щелчку на таком сообщении можно было сразу попасть на указанную строчку.
Если кто поддерживает - выскажитесь.
Классика же - интерфейс в базовом классе с переопределением в потомках:
Классика - это когда protected/public-виртуальные методы переопределяются. А вот для private - не так очевидно (в смысле применения). Спасибо, что ответили.
Да, я уже удалил свой пример, не видя вашего ответа, он действительно неудачным был.
Upd. Что-то я сам в азах запутался, пока вам отвечал. Всё правильно было в том примере, зря удалил. Ещё раз он же с примером использования:
Upd. Что-то я сам в азах запутался, пока вам отвечал. Всё правильно было в том примере, зря удалил. Ещё раз он же с примером использования:
Компилятор не делает двойку.
Не хороший пример, т.к. нигде не видно использование интерфейса CAnimal. Да еще двух потомков сделали public. Тему понимаю, так что норм.
Нормальный пример. Абстрактное животное в принципе какой-то звук издаёт, но неопределённый, поэтому у него метод Speak() вызывать нельзя, его можно вызвать только у животного конкретного вида. Поэтому в базовом классе объявляем закрытый виртуальный метод, а в потомках переопределяем его и открываем.
Нормальный пример. Абстрактное животное в принципе какой-то звук издаёт, но неопределённый, поэтому у него метод Speak() вызывать нельзя, его можно вызвать только у животного конкретного вида. Поэтому в базовом классе объявляем закрытый виртуальный метод, а в потомках переопределяем его и открываем.
Хорошо бы в потомках его тоже сделать private. Для лучшего понимания. Не суть, короче.
В потомках его вызывать надо. )
Вся фишка как раз в том, что не надо. См. мой пример.