Основной C++ () в большом проекте ООП

У меня была похожая проблема с этим. Решение, которое работает для меня, состоит в том, чтобы обновить мой виртуальный ящик до последней версии 5.0.10.

Прилагается ссылка для скачивания из virtualbox

Страница загрузки Virtual Box

15
задан Daniel Sloof 1 August 2009 в 17:31
поделиться

9 ответов

В моем коде это в основном вызов конструктора, возможно, вызов метода и некоторая обработка исключений. Это основной для моих проектов (заголовки и комментарии опущены, форматирование нарушено SO, как обычно):

int main( int argc, char * argv[] ) {
    int result = 0;
    try {
        CLIHandler ch( argc, argv );
        result = ch.ExecCommand();
    }
    catch( const Exception & ex ) {
        result = ExceptionHandler::HandleMyError( ex );
    }
    catch( const std::exception & ex ) {
        result = ExceptionHandler::HandleOtherError( ex );
    }
    catch( ... ) {
        result = ExceptionHandler::HandleUnknownError();
    }
    return result;
}
10
ответ дан 1 December 2019 в 04:18
поделиться

Да, причина в обратной совместимости. main - единственная точка входа, разрешенная в программе C, производящей исполняемые файлы, и, следовательно, в программе C ++.

Что касается того, что делать в main C ++, это зависит от обстоятельств. В общем, я имел обыкновение:

  • выполнять глобальную инициализацию (например, подсистемы ведения журнала)
  • анализировать аргументы командной строки и определять соответствующий класс, содержащий их
  • выделять объект приложения, настраивать его и т. Д.
  • запустить объект приложения (в моем случае метод бесконечного цикла. Программирование с графическим интерфейсом пользователя)
  • выполнить финализацию после того, как объект выполнил свою задачу.

о, и я забыл самую важную часть приложения

  • показать экран-заставку
2
ответ дан 1 December 2019 в 04:18
поделиться

Вы можете использовать статическую функцию-член класса вместо main с компилятором MSVC ++, выбрав точку входа в настройках проекта, в расширенных параметрах компоновщика.

Это действительно зависит от вашего проекта относительно того, что вы хотите там разместить ... если он небольшой, вы можете также поместить туда циклы сообщений, код инициализации и завершения. В более крупных проектах вам придется переместить их в свои собственные классы / функции или меньше иметь функцию монолитной точки входа.

0
ответ дан 1 December 2019 в 04:18
поделиться

Не все приложения C ++ являются ООП, и в любом случае весь код требует некоторой точки входа для запуска.

Когда я пишу код ООП, мой main () имеет тенденцию включать создание экземпляра объекта, возможно, после некоторого ввода пользователя. Я делаю это так, потому что считаю, что «работа» должна выполняться внутри объекта, иначе код написан не в «духе» ООП.

0
ответ дан 1 December 2019 в 04:18
поделиться

Мои обычно выполняют

  • Анализ командной строки
  • Инициализация объектов верхнего уровня
  • Обработка исключений
  • вход в основной цикл 'exec'

Насколько я понимаю , int main (int argc, char * argv []) по сути является соглашением из-за наследия C . Никогда не казался мне странным, но скорее полезным. В конце концов, C ++ расширяет C ... (и да, разница есть, но вопрос не в этом).

2
ответ дан 1 December 2019 в 04:18
поделиться

Моя функция main () часто создает различные объекты верхнего уровня, давая им ссылки друг на друга. Это помогает минимизировать взаимосвязь, сохраняя точные отношения между различными объектами верхнего уровня, ограниченными основным.

Часто эти объекты верхнего уровня имеют разные жизненные циклы с методами init (), stop () и start (). Функция main () управляет переводом объектов в желаемое рабочее состояние, ожидает того, что укажет на то, что пора выключиться, а затем закрывает все контролируемым образом. Опять же, это помогает поддерживать правильную развязку и сохраняет управление жизненным циклом верхнего уровня в одном легко понятном месте. Я часто вижу эту закономерность в реактивных системах, особенно с большим количеством потоков.

1
ответ дан 1 December 2019 в 04:18
поделиться

Я обычно использую main для чтения в командной строке, инициализация глобальных переменных, а затем вызов соответствующих функций / методов.

0
ответ дан 1 December 2019 в 04:18
поделиться

Короткий ответ: это зависит от обстоятельств. Он вполне может создать несколько локальных объектов, которые необходимы на время выполнения программы, настроить их, сообщить им друг о друге и вызвать длительный метод для одного из них.

Программе нужна точка входа. Если main должен быть методом объекта, то какого типа он должен быть?

С main в качестве глобальной точки входа он может выбрать, что настроить.

1
ответ дан 1 December 2019 в 04:18
поделиться

По-настоящему крупные проекты, как правило, не состоят из одной программы. Следовательно, будет несколько исполняемых файлов, каждый со своим main. Между прочим, эти исполняемые файлы довольно часто связываются асинхронно через очереди.

Да, каждый main имеет тенденцию быть очень маленьким, инициализируя структуру или что-то еще.

Вы имеете в виду, почему main () является функцией, а не метод класса? Что ж, из какого класса это был бы метод? Я думаю, что это в основном наследие C ++ от C, но ... все должно где-то начинаться :-)

0
ответ дан 1 December 2019 в 04:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: