Укажите основной класс в качестве первого для загрузки

Я пишу в Eclipse и у меня есть определенный класс, который должен быть точкой входа для моей программы. Когда я нажимаю кнопку «Выполнить», чтобы запустить программу, как мне настроить этот класс, чтобы он всегда загружался при запуске программы?

Когда я создаю первый класс, что я добавляю в него, чтобы при запуске программы этот класс загружался первым?

-6

Решение

«Когда я создаю первый класс, что я в него вкладываю, чтобы при запуске программы этот класс загружался первым?»

C ++ использует ту же концепцию, что и C для точки входа исполняемой программы (int main()):

class MyMainClass {
public:
void run() {
std::cout << "MyMainClass running ..." << std::endl;
}
};

int main(int argc, char* argv[]) { // This is the main entry point of a program.

std::cout << "In main() ..." << std::endl;

MyMainClass x;
x.run();
}

Выход

In main() ...
MyMainClass running ...

Вот живой образец.

Так нет класс, который загружается первым автоматически. Вы должны создать экземпляр и вызвать функцию-член этого класса

Если вы создаете программу как исполняемый файл, она связана с кодом запуска программы (обычно crt0.o), который содержит некоторые подпрограммы для инициализации контекста памяти вашей программы и привязки к параметрам, передаваемым различными exec() ОС звонит.
Этот код запуска, наконец, вызовет main() функция, которая помечена для внешней связи там.

Таким образом, вам нужно будет дать определение для main() функция при связывании исполняемого файла (независимо от того, откуда это, ваш main.cpp или другая библиотека, связанная с).


«Так что, когда программа будет запущена, она запустит это раньше всего?»

Подробно по этому вопросу вы задали ваш комментарий:

Упомянутый код запуска для C ++ включает в себя конструкторы статически class/struct объекты вызываются еще до main() выполняется, таким образом НЕТ. Если у вас есть следующий код MyStructконструктор будет вызываться раньше main():

struct MyStruct {
MyStruct() {
std::cout << "Construct MyStruct ..." << std::endl;
}
};

static MyStruct s;

int main() {
std::cout << "In main() ..." << std::endl;
}

Выход:

Construct MyStruct ...
In main() ...

Вот живой образец.


«Тогда как мне установить основной .cpp файл для инициализации первым?»

Как ты спрашиваешь как это организовано в ( Я предполагаю)

Eclipse CDT позволяет вам иметь несколько проектов в рабочей области. Обычный способ пойти

  1. Иметь один или несколько проектов библиотеки C ++ (общих или статических), содержащих весь код определения классов.
  2. Имейте по крайней мере один исполняемый проект C ++, который связывается в библиотеке (заглушки), созданной с другими проектами в этом рабочем пространстве, и предоставляет определение для main(),
  3. Это очень распространенная методика иметь отдельный исполняемый проект C ++, который действует как средство выполнения модульных тестов для классов, объявленных и определенных в проектах библиотек C ++.
    Вполне возможно, что библиотека инфраструктуры модульного тестирования уже предоставляет подходящее определение для main() (например, googletest предоставляет эту возможность).
1

Другие решения

C ++ имеет последовательность запуска / инициализации, очень отличную от Java (откуда (я полагаю) вы откуда).

В Java есть один класс, который загружается, потому что его имя передается в качестве аргумента JVM. Остальные классы загружаются по мере их использования.

В C ++ все «классы» (на самом деле, объектные файлы) связаны друг с другом и «загружаются» (память выделяется для статических данных, загружаются таблицы виртуальных методов и т. Д.) Сразу же при запуске вашей программы.

После загрузки памяти для статических данных наступает фаза, когда все глобальные экземпляры классов и другие глобальные переменные (думаю, static final MyClass = new MyClass(), но это действительно не так), чтобы их конструкторы запускались.

После того, как все статические конструкторы, управление передается главный() функция. Обратите внимание, что main() Функция — это не метод любого класса — это отдельная функция.

внутри main() Вы можете делать все, что захотите, включая создание экземпляров любых классов.

Когда main () завершается, ваша программа завершается (за исключением любых потоков).

-1

По вопросам рекламы [email protected]