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

Перезагрузка operator == - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как узнать, сколько памяти занимает тот или иной элемент программы? http://www.cyberforum.ru/cpp-beginners/thread382725.html
Товарищи, подскажите, пожалуйста, ответы на следующие вопросы: 1) Есть какие-либо средства определения, сколько памяти жрёт программа в целом и ее составные части (сколько требуется под код, под...
C++ WinAPI + AD Доброе время суток! подскажите как с помощью WinAPI на Си проверить установлен ли Active Directory в системе? Заранее спасибо http://www.cyberforum.ru/cpp-beginners/thread382715.html
пустой ввод C++
Допустим читаю я из файла, но его нету, вывожу я ошибку, далее выкидывает. Но как сделать, что бы после ошибки нажать ентер и тока тада выкинуло бы. if (!input) cout << "Ошибка"; break;
CopyFile() C++
Здравствуйте, помогите мне пожалуйста, если можно, ответить на следующий вопрос. #include<iostream> #include"windows.h" using namespace std; int main() { char filename; ...
C++ Классы, задача с классами http://www.cyberforum.ru/cpp-beginners/thread382694.html
Всем доброго времени суток. Помогите пожалуйста разобраться с заданием. Я даже не знаю с чего начать, т.к. классов толком и не знаю. Читал всякий материал, но в них мало информации про объекты,...
C++ Очереди Cpp привет всем, помогите реализовать программку на С++ Смоделировать очередь(на базе статического массива), в которой реализован такой механизм изъятия элемента из очереди: начало очереди всегда... подробнее

Показать сообщение отдельно
Bers
Заблокирован
15.11.2011, 13:55
Цитата Сообщение от silent_1991 Посмотреть сообщение
Эти две фразы не являются эквивалентными.
Тем не менее, это - нарушение инварианта класса. Если он бросит исключение, а вызывающая сторона его не обработает, класс окажется виновником крэша.

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

Она не обязана знать о кодах ошибок, и она не обязана знать об исключениях. Она вообще не обязана ничего знать об устройстве класса. Только - его публичный интерфейс.


Цитата Сообщение от silent_1991 Посмотреть сообщение
Каким образом вы восстановитесь после ошибки "деление на нуль"?
Не нужно восстанавливаться после ошибки.
Нужно не допускать ошибок.
Нужно заранее спрогнозировать, что получится деление на ноль, и не допустить выполнение такой операции.

Если аргументы не_валидны (их использование приведёт к аварии), то - отказ всей операции. И откат на исходную позицию. Пользователь получает уведомление в виде кода ошибки (если это возможно), либо - любую дефолтную муру + GetLastError() если вернуть код ошибки средствами самого метода не возможно.

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

А релизе любой метод, который теоретически может сделать "отказ операции" нужно ВСЕГДА проверять на код ошибки. Конечно, если вызывающая сторона заинтересована в безопасности. Если не заинтересована - тогда не обязательно.

Она может игнорировать сообщения класса, и это не приведёт к крэшу, просто потому, что класс никогда не сделает ничего такого, что может привести к крушению.

Если же крэш происходит на территории вызывающей стороны (допустим класс не выполнил операцию, и вызывающая сторона оказалась неготовой к следующей операции, и эта следующая операция вызвала крэш) - то это уже косяк вызывающей стороны, и программиста, который её делал. Класс тут уже не приделах.

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



Цитата Сообщение от silent_1991 Посмотреть сообщение
Возможно, пользователь имел ввиду 1? Окей, давайте вместо нуля единичку подставим. Стоп. А вдруг он хотел 10?.
С точки зрения самого класса, как самостоятельной целостной логической единицы - совершенно не важно, о чем думала вызывающая сторона, когда присылала упоротые аргументы.
Важно только три вещи:

1. Не допустить крэша по своей вине.
2. Выполнить задачу, которую на класс навесил его создатель.
3. Выполнить штатную процедуру отказа от работы в случае, если выполнение работы противоречит первому пункту.

/зы исключение нарушает инкапсуляцию
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.