Что бы не тащить имена внутренних типов в пространство имен. В больших проектах банально удобнее TClassA::TSet и TClassB::TSet, чем TSetClassA и TSetClassB.
Ааа, я понял: это имеет смысл при использовании
namespace
Я просто не использовал еще пространства имен (их объявление). Спасибо большое!
Есть еще такое понятие как глобальное пространство имен)
Ну глобальное то все невольно используют)
Я, к слову, на текущем этапе (освоения ООП) использую оператор расширения контекста что бы явно обозначить вызов функции, которая объявлена в глобальной области и не является методом класса:
Это я что-то не понимаю, или тут действительно что-то не так?
class A
{
public:
A(constint a=0);
~A(void){};
int a1;
};
A::A(int a)
{
a1=a;
Print("A a1=",a1);
}
class B : A
{
public:
B(constint b=1);
~B(void){};
int B_Test(void);
};
B::B(int b)
{
A(b);
}
int B::B_Test(void)
{
return a1;
}
B test();
voidOnStart()
{
Print("a1=",test.B_Test());
}
Результат:
2023.03.2513:14:12.969 test (Si-6.23,M15) A a1=02023.03.2513:14:12.970 test (Si-6.23,M15) A a1=12023.03.2513:14:12.970 test (Si-6.23,M15) a1=0
Конструктор с параметрами по умолчанию используется как конструктор по умолчанию (первый вызов A::A(int)), хотя в документации сказано, что это не так:
Это я что-то не понимаю, или тут действительно что-то не так?
Результат:
Конструктор с параметрами по умолчанию используется как конструктор по умолчанию (первый вызов A::A(int)), хотя в документации сказано, что это не так:
А если другие параметры вызова A() зависят от вычислений внутри B::B() ?
Тогда, похоже, никак.
Но в Java тоже вызов конструктора суперкласса возможен только первой командой в конструкторе потомка, так что ситуация аналогична - нельзя в потомке произвести вычисление параметров конструктора родительского класса.
Что бы не тащить имена внутренних типов в пространство имен. В больших проектах банально удобнее TClassA::TSet и TClassB::TSet, чем TSetClassA и TSetClassB.
Ааа, я понял: это имеет смысл при использовании
namespaceЯ просто не использовал еще пространства имен (их объявление). Спасибо большое!
Что бы их не было видно за пределами класса, объявляй их private
Для этого тоже пространство имен нужно наверное. По тому, что вот так вот можно:
Ааа, я понял: это имеет смысл при использовании
Я просто не использовал еще пространства имен (их объявление). Спасибо большое!
Для этого тоже пространство имен нужно наверное. По тому, что вот так вот можно:
Есть еще такое понятие как глобальное пространство имен)
Есть еще такое понятие как глобальное пространство имен)
Ну глобальное то все невольно используют)
Я, к слову, на текущем этапе (освоения ООП) использую оператор расширения контекста что бы явно обозначить вызов функции, которая объявлена в глобальной области и не является методом класса:
Ну а имена функций MQL для нейминга своих методов (как здесь) не использую в принципе: как минимум, подсвечивание сбивает с толку
Это я что-то не понимаю, или тут действительно что-то не так?
Результат:
Конструктор с параметрами по умолчанию используется как конструктор по умолчанию (первый вызов A::A(int)), хотя в документации сказано, что это не так:
"Конструктор, все параметры которого имеют значения по умолчанию, не является конструктором по умолчанию." https://www.mql5.com/ru/docs/basis/types/classes#default_constructor
Второй вызов A::A(int) (из B::B(int) ) устанавливает значение a1, которое после "исчезает".
Это я что-то не понимаю, или тут действительно что-то не так?
Результат:
Конструктор с параметрами по умолчанию используется как конструктор по умолчанию (первый вызов A::A(int)), хотя в документации сказано, что это не так:
"Конструктор, все параметры которого имеют значения по умолчанию, не является конструктором по умолчанию." https://www.mql5.com/ru/docs/basis/types/classes#default_constructor
Второй вызов A::A(int) (из B::B(int) ) устанавливает значение a1, которое после "исчезает".
Тут, конечно, грабли от разработчиков MQL.
Спасибо.
А если другие параметры вызова A() зависят от вычислений внутри B::B() ?
Я дико извиняюсь, а что за хреновина с версией 3660 (судя по названию файла)? Никогда такого не было...
Я дико извиняюсь, а что за хреновина с версией 3660 (судя по названию файла)? Никогда такого не было...
Антивирус добрался до агентов?
Спасибо.
А если другие параметры вызова A() зависят от вычислений внутри B::B() ?
А если другие параметры вызова A() зависят от вычислений внутри B::B() ?
Конструкторы вызываются строго снизу-вверх: от родителя к потомкам.