Это всё понятно. Непонятно почему SetSaveRequired() и GetSaveRequired() нестатические, но записывают в статическую переменную.
вот это мне и не понятно, поэтому и обратился за помощью, модификаторами я редко пользуюсь, больше интуитивно, но как всегда хочется оптимальное решение
public GetSaveRequired() используется в классе для управления всем этим зоопарком стратегий
при таком шаблоне пишу только метод NextStepStrategy - только в нем изменения для ТС, все остальное одинаковое и поэтому в базовом классе CStrategy собираю все методы и все поля - их не много
ЗЫ: спиной чую что не айс мой код, но так точно работать будет и не наплодю дубликаты переменной f_save_required;
вот это мне и не понятно, поэтому и обратился за помощью, модификаторами я редко пользуюсь, больше интуитивно, но как всегда хочется оптимальное решение
давайте в коде попробую спросить, сейчас так:
public GetSaveRequired() используется в классе для управления всем этим зоопарком стратегий
при таком шаблоне пишу только метод NextStepStrategy - только в нем изменения для ТС, все остальное одинаковое и поэтому в базовом классе CStrategy собираю все методы и все поля - их не много
ЗЫ: спиной чую что не айс мой код, но так точно работать будет и не наплодю дубликаты переменной f_save_required;
Я бы вообще убрал эти функции.
Все функции, не изменяющие структуру, сделал константными.
Все неконстантные функции должны устанавливать флаг записи.
И ещё добавил бы функцию Save( int fileHandle ). Эта функция должна записать структуру и сбросить флаг.
Для получения состояния флага можно сделать статическую функцию.
if( CStrategy::GetSaveRequired() )
{
int fileHandle = FileOpen( ... );
for( int i = 0; i < 10; i++ )
{
strategies[i].Save( fileHandle );
}
FileClose( fileHandle );
}
Все функции, не изменяющие структуру, сделал константными.
Все неконстантные функции должны устанавливать флаг записи.
пример бы, говорю же, с модификаторами вообще беда у меня
ЗЫ: тем более в инете вообще ужас что творится в обсуждении программирования - вот про const в прошлом месяце на хабре статья была, смысл - да не нужен этот const , вот смотрите ассемблерный код ничем не отличается что без const - компилятор все уберет (((
пример бы, говорю же, с модификаторами вообще беда у меня
погуглил, почитал, что то опять пошло не так...
class A {
private:
int x;
public:
void f(int v) const { Print("const"); }
void f(constint v) { x = v; Print("(const) x = v "); }
// void f(int v) { x = v; Print("x = v "); } // 'f' - function already defined and has body
};
A a;
//+------------------------------------------------------------------+voidOnStart()
{
int y = 1;
constint z = 2;
a.f(3);
a.f(y);
a.f(z);
}
//+------------------------------------------------------------------+
class A {
private:
int x;
public:
void f(int v) const { Print("const"); }
void f(constint v) { x = v; Print("(const) x = v "); }
// void f(int v) { x = v; Print("x = v "); } // 'f' - function already defined and has body
};
A a;
const A b;
//+------------------------------------------------------------------+voidOnStart()
{
int y = 1;
constint z = 2;
a.f(3);
a.f(y);
a.f(z);
b.f(3);
b.f(y);
b.f(z);
}
Vladimir Simakov: Это перегрузка для константного класса.
хм.. точно, читал почти полчаса и хабр и форумы, но въехать не смог
Спасибо! теперь разобрался
есть еще подозрение что такой пример:
class A {
private:
int x;
public:
void f(int v) const { Print("const"); }
constvoid f(int v) { x = v; Print("(const) x = v "); }
};
A a;
const A b;
//+------------------------------------------------------------------+voidOnStart()
{
int y = 1;
constint z = 2;
a.f(3);
a.f(y);
a.f(z);
b.f(3);
b.f(y);
b.f(z);
}
2019.09.13 22:04:34.295tst (EURUSD,H1)(const) x = v
2019.09.13 22:04:34.295tst (EURUSD,H1)(const) x = v
2019.09.13 22:04:34.295tst (EURUSD,H1)(const) x = v
2019.09.13 22:04:34.295tst (EURUSD,H1)const
2019.09.13 22:04:34.295tst (EURUSD,H1)const
2019.09.13 22:04:34.295tst (EURUSD,H1)const
выдал такие же значения, но смысл совсем в другом? - тут тогда помощь зала нужна опять
Nikolai Semko: Сижу сейчас на лекции по ООП. Может что путное узнаю - поделюсь )) могу сбросить текущую лекцию. Пока, конечно же, банальные вещи.
ну лекция у тебя скорее всего на тарабарском языке, а тут вон на русском языке фиг что узнаешь, по третьему кругу по интернету прошелся... мрачно дело, в целом ситуация как и здесь на форуме, настоящих программистов не более 10-ти человек на ресурсах,а остальные эникейщики
ладно, с const в целом ситуация прояснилась, с остальными модификаторам работал, в общем нахлебался теории по самое... нужно применять, а то как студент себя чувствую )))
ну лекция у тебя скорее всего на тарабарском языке, а тут вон на русском языке фиг что узнаешь, по третьему кругу по интернету прошелся... мрачно дело, в целом ситуация как и здесь на форуме, настоящих программистов не более 10-ти человек на ресурсах,а остальные эникейщики
ладно, с const в целом ситуация прояснилась, с остальными модификаторам работал, в общем нахлебался теории по самое... нужно применять, а то как студент себя чувствую )))
Да, у меня тоже похожая ситуация. Учиться не трудно, труднее переучиваться, ломать старые привычки. Не могу до сих от многих вредных привычек процедурного программирования отучиться.
пример бы, говорю же, с модификаторами вообще беда у меня
ЗЫ: тем более в инете вообще ужас что творится в обсуждении программирования - вот про const в прошлом месяце на хабре статья была, смысл - да не нужен этот const , вот смотрите ассемблерный код ничем не отличается что без const - компилятор все уберет (((
На константы и статики можно просто пока забить. На интерфейсы тоже.
А вот когда все будет готово, тогда посмотреть и что-то отметить как статик, а что-то как констант. А на интерфейсы можно вообще забить.
Это всё понятно. Непонятно почему SetSaveRequired() и GetSaveRequired() нестатические, но записывают в статическую переменную.
вот это мне и не понятно, поэтому и обратился за помощью, модификаторами я редко пользуюсь, больше интуитивно, но как всегда хочется оптимальное решение
давайте в коде попробую спросить, сейчас так:
public GetSaveRequired() используется в классе для управления всем этим зоопарком стратегий
при таком шаблоне пишу только метод NextStepStrategy - только в нем изменения для ТС, все остальное одинаковое и поэтому в базовом классе CStrategy собираю все методы и все поля - их не много
ЗЫ: спиной чую что не айс мой код, но так точно работать будет и не наплодю дубликаты переменной f_save_required;
вот это мне и не понятно, поэтому и обратился за помощью, модификаторами я редко пользуюсь, больше интуитивно, но как всегда хочется оптимальное решение
давайте в коде попробую спросить, сейчас так:
public GetSaveRequired() используется в классе для управления всем этим зоопарком стратегий
при таком шаблоне пишу только метод NextStepStrategy - только в нем изменения для ТС, все остальное одинаковое и поэтому в базовом классе CStrategy собираю все методы и все поля - их не много
ЗЫ: спиной чую что не айс мой код, но так точно работать будет и не наплодю дубликаты переменной f_save_required;
Я бы вообще убрал эти функции.
Все функции, не изменяющие структуру, сделал константными.
Все неконстантные функции должны устанавливать флаг записи.
И ещё добавил бы функцию Save( int fileHandle ). Эта функция должна записать структуру и сбросить флаг.
Для получения состояния флага можно сделать статическую функцию.
Я бы вообще убрал эти функции.
Все функции, не изменяющие структуру, сделал константными.
Все неконстантные функции должны устанавливать флаг записи.
пример бы, говорю же, с модификаторами вообще беда у меня
ЗЫ: тем более в инете вообще ужас что творится в обсуждении программирования - вот про const в прошлом месяце на хабре статья была, смысл - да не нужен этот const , вот смотрите ассемблерный код ничем не отличается что без const - компилятор все уберет (((
пример бы, говорю же, с модификаторами вообще беда у меня
погуглил, почитал, что то опять пошло не так...
2019.09.13 21:10:54.316 tst (EURUSD,H1) x = v
2019.09.13 21:10:54.316 tst (EURUSD,H1) x = v
2019.09.13 21:10:54.316 tst (EURUSD,H1) x = v
погуглил, почитал, что то опять пошло не так...
2019.09.13 21:10:54.316 tst (EURUSD,H1) x = v
2019.09.13 21:10:54.316 tst (EURUSD,H1) x = v
2019.09.13 21:10:54.316 tst (EURUSD,H1) x = v
Это перегрузка для константного класса.
хм.. точно, читал почти полчаса и хабр и форумы, но въехать не смог
Спасибо! теперь разобрался
есть еще подозрение что такой пример:
2019.09.13 22:04:34.295 tst (EURUSD,H1) (const) x = v
2019.09.13 22:04:34.295 tst (EURUSD,H1) (const) x = v
2019.09.13 22:04:34.295 tst (EURUSD,H1) (const) x = v
2019.09.13 22:04:34.295 tst (EURUSD,H1) const
2019.09.13 22:04:34.295 tst (EURUSD,H1) const
2019.09.13 22:04:34.295 tst (EURUSD,H1) const
могу сбросить текущую лекцию. Пока, конечно же, банальные вещи.
Сижу сейчас на лекции по ООП. Может что путное узнаю - поделюсь ))
могу сбросить текущую лекцию. Пока, конечно же, банальные вещи.
ну лекция у тебя скорее всего на тарабарском языке, а тут вон на русском языке фиг что узнаешь, по третьему кругу по интернету прошелся... мрачно дело, в целом ситуация как и здесь на форуме, настоящих программистов не более 10-ти человек на ресурсах,а остальные эникейщики
ладно, с const в целом ситуация прояснилась, с остальными модификаторам работал, в общем нахлебался теории по самое... нужно применять, а то как студент себя чувствую )))
ну лекция у тебя скорее всего на тарабарском языке, а тут вон на русском языке фиг что узнаешь, по третьему кругу по интернету прошелся... мрачно дело, в целом ситуация как и здесь на форуме, настоящих программистов не более 10-ти человек на ресурсах,а остальные эникейщики
ладно, с const в целом ситуация прояснилась, с остальными модификаторам работал, в общем нахлебался теории по самое... нужно применять, а то как студент себя чувствую )))
Да, у меня тоже похожая ситуация. Учиться не трудно, труднее переучиваться, ломать старые привычки. Не могу до сих от многих вредных привычек процедурного программирования отучиться.
пример бы, говорю же, с модификаторами вообще беда у меня
ЗЫ: тем более в инете вообще ужас что творится в обсуждении программирования - вот про const в прошлом месяце на хабре статья была, смысл - да не нужен этот const , вот смотрите ассемблерный код ничем не отличается что без const - компилятор все уберет (((
На константы и статики можно просто пока забить. На интерфейсы тоже.
А вот когда все будет готово, тогда посмотреть и что-то отметить как статик, а что-то как констант. А на интерфейсы можно вообще забить.