Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Виртуальные функции - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ MessageBox http://www.cyberforum.ru/cpp-beginners/thread346872.html
#include "stdafx.h" #include <windows.h> void main() { MessageBox(0,L"Лалалал",L"Ололо", MB_OK); } Здравствуйте.Есть такой вот рабочий код.При выполнении открывается окошко cmd и...
C++ Запись и чтение файлов на диск и с диска Добрый день,помогите пожалуйста составить две программы. 1)Создать файл с полями:Фамилия,№ экзаменационного билета,зачет\незачет. 2)Считывание данных из файла и вывод на экран в виде таблицы,затем... http://www.cyberforum.ru/cpp-beginners/thread346857.html
C++ сконструировать класс
Добрый день. Мне надо сконструировать следующий класс: class LogicElement { public: // constructors / destructor LogicElement(const char *ElementType, int nIpiNmb ); LogicElement(const...
C++ Проблема наследования от шаблонного класса.
Привет всем! У меня есть шаблонный класс, и наследуемый от него шаблонный класс. Базовый: #include "Lgraph.h" #include "Mgraph.h" template <class Edge>
C++ Число прописью, от 1 до 99 на русском http://www.cyberforum.ru/cpp-beginners/thread346741.html
Программа работает, но не совсем правильно, отлично выводит числа от 1 до 20 потом при вводе 21 - выводит один один; 47 - выводит семь семь; 83 - выводит три три. Помогите исправить ошибку. ...
C++ Как правильно записать? y=sin|x|/0,1+9,4sin(3x-2,5) Добавлено через 13 минут матем. формулу подробнее

Показать сообщение отдельно
Bers
Заблокирован
31.08.2011, 21:28
Цитата Сообщение от ForEveR Посмотреть сообщение
Bers, проще, но не дальновидно. А что, если в файл придется выводить
Понял)

Но тогда получается, что:

1. Придётся, предварительно ручками подготавливать поток вывода, и передавать его явно в качестве параметра, что бы класс сделал свою работу. (Излишняя нагрузка на вызывающую сторону)

2. Вызывающей стороне придётся самостоятельно контролировать, корректность работы потока, передаваемого объекту класса, в качестве параметра. В частности, проверять смог ли поток успешно открыть файл, или нет, и не забывать сделать потоку close()

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

Лично я считаю, что если вдруг приспичило выводить результат ещё и в файл - лучше добавить специализированный метод, принимающий в качестве параметра имя файла. Метод сам откроет файл в соответствии с новой задачей: в режиме перезаписи, или ещё как то...
И сам проверит успешность всей операции.

Ведь класс для того и создаётся: с целью облегчить жизнь вызывающей стороне, избавить её от львиной части рутины, по подготовкам и проверкам.
Он должен быть максимально устойчивым к ошибкам, а следовательно - принимать извне как можно меньше параметров.

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

Можно вылечить за счет добавления в зоне инициализации:
Подготовка класса к работе:

Студент.SetShowMode(Режим); //здесь можно задать так, что бы студент результат писал в файл
//метод сам подготовит поток вывода в соответствии с режимом, и проверит успешность всех операций

...

Cтудент.Show(); //Сам же вывод по прежнему без изменений. Нигде в программе править не придётся.

Добавлено через 10 минут
Цитата Сообщение от AzaKendler Посмотреть сообщение
Ну похвали уже..Я ж учу еще.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru