Здравствуйте. На данный момент я нахожусь на начальном этапе изучения C++, поэтому хотел бы задать вопрос более опытным. Я написал простенькую консольную программу и попытался реализовать элементарный диалог с пользователем посредствам создания специального метода в одном из классов :
class MyClass {
public :
void method() { cout << endl << "Method used" << endl; }
void menu() {
int* choice = new int;
cout << "1. Use method;" << endl << "2. Stop;" << endl << "set : ";
cin >> *choice;
switch(*choice) {
case 1 : delete choice; method(); menu(); break;
case 2 : delete choice; exit(1); break;
}
}
};
В действительности он немного побольше, но концепция такая же. Вот собственно хотел спросить по поводу применения данного принципа : нормально так делать? В смысле, меня немного беспокоит что каждый новый вход в метод menu() после ввода "1" будет приостанавливать действующий вызов. Следовательно, если так долго продолжать то получится довольно длинная цепочка приостановленных вызовов.
Или же целесообразней вынести всё это безобразие, к примеру, в main() ? :
int main() {
MyClass* my_obj = new MyClass;
int* choice = new int;
while(true) {
cout << "1. Use method;" << endl << "2. Stop;" << endl << "set : ";
cin >> *choice;
switch(*choice) {
case 1 : my_obj->method(); break;
case 2 : delete choice; delete my_obj; exit(1); break;
}
}
return 0;
}
При использовании метода menu(), равно как и main(), освобождается вся выделенная память. Однако, остается длинный хвост приостановленных вызовов. Может ли такая цепочка, например, рано или поздно занять много памяти или типа того? В общем, хотелось бы получить аргументированный ответ, спасибо =)
Ну, реально вы будете очень долго вызывать menu()
, пока исчерпается стек, но просто зачем так поступать? можно приобрести плохую привычку :) - тем более, что вы совершенно корректно написали второй пример.
У меня только два замечания:
1. совершенно незачем делать choice
указателем и выделять для него память. Лучше сделать его простой переменной int
. Конечно, если это просто для тренировки, то ладно :)
2. exit(1)
- не лучший способ выхода, тем более что ненулевой код свидетельствует обычно о какой-то ошибке. Просто выходите из main()
- этого достаточно. И, кстати, break
после exit(1)
можно не писать. Надеюсь, понятно, почему? :)
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Например, я пишу 'std::cout << 5'Как мне потом это значение считать с консоли? Upd: не самому вводить, а считать то, что уже вывело
Посоветуйте несколько книг для практики по основам языка программирования на C++Это могут быть как справочные пособия, так и какие-нибудь...
Предположим, есть класс для работы с базой данныйЕсть методы этого класса, которые обрабатывает возможные ошибки через if, записывая текст...