Вчера мне попался такой вот, странный на первый взгляд, вариант реализации одной задачи. Напишу проще.
Дальше начинается самое интересное. В OnStart() вижу такое:
Это как понимать? Если понадобится кину полный код. Но я упростил.
Получается, по синтаксису типа объявляется экземпляр класса CustomClass. А на деле, я в шоке от таких кодов. Как можно было вообще догадаться до такого, что бы такое написать..)) Жесть какая-то. Очень хочется услышать что это за хрень и откуда её корни вообще идут. Я не встречал на чём писал подобного.
А от конструктора возвращения чего-то и не ожидается как видно. В него передаются параметры и все.
CustomClass db(dbPath, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
Ожидание уже идет от функции класса isValid
if (!db.isValid()) return;
Вчера мне попался такой вот, странный на первый взгляд, вариант реализации одной задачи. Напишу проще.
Дальше начинается самое интересное. В OnStart() вижу такое:
Это как понимать? Если понадобится кину полный код. Но я упростил.
Получается, по синтаксису типа объявляется экземпляр класса CustomClass. А на деле, я в шоке от таких кодов. Как можно было вообще догадаться до такого, что бы такое написать..)) Жесть какая-то. Очень хочется услышать что это за хрень и откуда её корни вообще идут. Я не встречал на чём писал подобного.
И в чём тут жесть?
То что Вы этого не встречали, не удивительно.
Судя по Вашим вопросам, Вы ещё многого не встречали.
Ожидание уже идет от функции класса isValid
Я это вижу. Вот оригинальный код:
class SQLite3 { private: // Объявления private-переменных и методов public: // Объявления public-переменных и методов SQLite3(string filename, int flags, string vfs = "") { m_valid = sqlite3_open(filename, m_ref, flags, vfs); if (m_valid != SQLITE_OK) Print(">>> Error opening database [", filename, "]: ", SQLite3 :: errorCode2Msg(m_valid)); } ~SQLite3() { if(isValid()) { int ret = sqlite3_close(m_ref); if (ret != SQLITE_OK) Print(">>> Error close connection: ", getErrorMsg()); } } bool isValid() const {return m_valid == SQLITE_OK;} }
Вот вызов из OnStart():
void OnStart() { SQLite3 db(dbPath, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE); if (!db.isValid()) return; }
Так вот даже здесь видно, что метод db(...) это и есть конструктор класса SQLite3. Я вот и думаю, а как автор умудрился обозвать этот конструкторе как db?
И в чём тут жесть?
То что Вы этого не встречали, не удивительно.
Судя по Вашим вопросам, Вы ещё многого не встречали.
Выше написал вопрос. Не очевидно вызывать функцию db, которой нет вообще т.е. она даже не объявлена. В то же время, это вообще конструктор, а не функция. Вот это странно. Если для Вас это не странно, попробуйте пояснить.. Думаю, интересно не только мне. Не банальный вопрос..
Выше написал вопрос. Не очевидно вызывать функцию db, которой нет вообще т.е. она даже не объявлена. В то же время, это вообще конструктор, а не функция. Вот это странно. Если для Вас это не странно, попробуйте пояснить.. Думаю, интересно не только мне. Не банальный вопрос..
db это имя объекта. Если не нравится можете обозвать его: 'x'.
В строке
SQLite3 db(dbPath, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
создаётся объект db.
Встроке
if( !db.isValid() )
вызывается функция этого объекта.
Это всё элементарные вещи.
Выше написал вопрос. Не очевидно вызывать функцию db, которой нет вообще т.е. она даже не объявлена. В то же время, это вообще конструктор, а не функция. Вот это странно. Если для Вас это не странно, попробуйте пояснить.. Думаю, интересно не только мне. Не банальный вопрос..
А это что???
class SQLite3 { private: // Объявления private-переменных и методов public: // Объявления public-переменных и методов SQLite3(string filename, int flags, string vfs = "") { m_valid = sqlite3_open(filename, m_ref, flags, vfs); if (m_valid != SQLITE_OK) Print(">>> Error opening database [", filename, "]: ", SQLite3 :: errorCode2Msg(m_valid)); } ~SQLite3() { if(isValid()) { int ret = sqlite3_close(m_ref); if (ret != SQLITE_OK) Print(">>> Error close connection: ", getErrorMsg()); } } bool isValid() const {return m_valid == SQLITE_OK;} }
Разве не функция класса???
А это что???
Разве не функция класса???
А это функция класса SQLite3. Но я то приводил не только эту строку:
void OnStart() { SQLite3 db(dbPath, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE); if (!db.isValid()) return; }
В строках:
if (!db.isValid()) return;
Уже, по сути, всё очевидно. А строка:
SQLite3 db(dbPath, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
Странная.
db это имя объекта. Если не нравится можете обозвать его: 'x'.
В строке
SQLite3 db(dbPath, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
создаётся объект db.
Встроке
if( !db.isValid() )
вызывается функция этого объекта.
Это всё элементарные вещи.
Объект т.е. экземпляр класса создаётся через оператор new. А если методы класса статичные, то экземпляр не нужен. Можно вызвать было бы типа как здесь SQLite.вызываемый метод.
А мы видим, что здесь он типа создаёт объект, что, кстати, я уже и написал выше т.к. понял что это так. Но это не верно синтаксически. Вот как было бы, правильно:
SQLite3 sql = new SQLite3(dbPath, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
Вот здесь очевидно, что это объект, как Вы выразились. А в том случает хз что за синтаксис вообще. Было бы интересно увидеть ссыоку на открытый источник или книгу, или вообще тему, как называется подобное. Т.к. сколько читал, такого не встречал.
Объект т.е. экземпляр класса создаётся через оператор new. А если методы класса статичные, то экземпляр не нужен. Можно вызвать было бы типа как здесь SQLite.вызываемый метод.
А мы видим, что здесь он типа создаёт объект, что, кстати, я уже и написал выше т.к. понял что это так. Но это не верно синтаксически. Вот как было бы, правильно:
Вот здесь очевидно, что это объект, как Вы выразились. А в том случает хз что за синтаксис вообще. Было бы интересно увидеть ссыоку на открытый источник или книгу, или вообще тему, как называется подобное. Т.к. сколько читал, такого не встречал.
вот здесь почитайте Классы (после структур)
https://www.mql5.com/ru/docs/basis/types/classes
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вчера мне попался такой вот, странный на первый взгляд, вариант реализации одной задачи. Напишу проще.
Дальше начинается самое интересное. В OnStart() вижу такое:
Это как понимать? Если понадобится кину полный код. Но я упростил.
Получается, по синтаксису типа объявляется экземпляр класса CustomClass. А на деле, я в шоке от таких кодов. Как можно было вообще догадаться до такого, что бы такое написать..)) Жесть какая-то. Очень хочется услышать что это за хрень и откуда её корни вообще идут. Я не встречал на чём писал подобного.