Ввод / вывод и классы - PullRequest
       28

Ввод / вывод и классы

0 голосов
/ 25 апреля 2018

Недавно я смотрел пару видео на C ++. В видео человек сказал, что обычно вы не хотите использовать ввод / вывод в классе. Может кто-нибудь уточнить, почему? Это то, что говорит этот парень, или это какой-то стандарт в программировании? Вместо этого он использовал

Throw

вместо cout / print / printf.

В основном видео говорит, что вы не должны использовать ввод / вывод в классах. Это отраслевой стандарт? Если так, то почему?

1 Ответ

0 голосов
/ 25 апреля 2018

Классы, предназначенные для повторного использования, не должны делать слишком много предположений о том, где они будут использоваться.Представьте, что вы создаете класс C ++ для инкапсуляции идеи файла, например:

class CFile {
public:
    CFile(const char* path);
    void rename(const char* new_path);
    std::vector<char> get_content();
};

Этот класс можно использовать многократно.Сегодня его можно использовать в консольном приложении, где можно записать информацию в стандартный вывод.Завтра он может быть использован в приложении с графическим интерфейсом, где нет смысла писать в стандартный вывод.Вероятно, для метода rename() имеет больше смысла выдавать исключение при ошибке, чем для записи в стандартный вывод.Клиентское приложение (консоль против GUI) может затем выбрать обработку ошибки, как они захотят.

Однако на практике вы обнаружите, что большинство систем представляют собой смесь классов многократного использования (классы, которые могут быть легкоизвлекается из одного приложения и используется как есть в другом приложении) и целевые классы (классы, предназначенные для обработки сценария использования, специфичного для программы).Для сфокусированного класса может быть предпочтительнее принять его вариант использования, и в этом случае он может свободно писать в stdout.Например, ваш main() метод может просто выглядеть примерно так:

int main(int argc, char* argv[]) {
    CMyApplication application;
    return application.run(argc, argv);
}

В этом случае все функции вашего приложения скорее всего в классах, а «контроллер» или «драйвер» для всехвашего приложения это класс CMyApplication.Этот класс может писать в стандартный вывод все, что ему нужно, если это уместно.

...