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

Когда нужно использовать исключения - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Что означает using typename в шаблоне? http://www.cyberforum.ru/cpp-beginners/thread1598268.html
template < typename T > class Class_name { public: using value_type = T; ... что произошло в этом месте? Зачем? using value_type = T;
C++ Реализовать класс для сбора данных о системе из ключей реестра, выводящий полученные данные в файл Реализовать класс осуществляющий сбор данных о системе из ключей реестра и выводящий полученные данные в файл. С тем, что такое реестр Windowsможно ознакомиться тут: http://support.microsoft.com/kb/256986/ru В общем – это база данных описывающая параметры конфигурации ОС. Зайти в реестр можно путём зажатия клавиш(“win” + r), в появившемся окне введите “regedit” без кавычек. Интересующая... http://www.cyberforum.ru/cpp-beginners/thread1598261.html
C++ Даны текстовый файл, который начинается с цифры N, далее идут N записей следующего формата: <Фамилия> <Номер ш
Даны текстовый файл, который начинается с цифры N, далее идут N записей следующего формата: <Фамилия> <Номер школы> <Год вступления> Для каждого номера школы, присутствующего в выходных данных, вывести общее число абитуриентов за все годы (сначала указывать число абитуриентов, затем номер школы). Сведения по каждой школе выводить на новой строке и упорядочивать по возрастанию числа...
Все цифры строки заменить на их английские названия C++
должен быть обычный массив(не динамический без функций) в который вписываешь символы. программа должна все цифры, типа:1.2.3. заменять на слова: one ,two, three.
C++ Найти сумму всех элементов на побочной диагонали матрицы http://www.cyberforum.ru/cpp-beginners/thread1598236.html
1. Дана матрица с(6,6) в строках с положительным элементом на побочной диагонали найти сумму всех элементов. Если на побочной диагонали положительных элементов нет, то выдать об этом сообщение. #include <iostream> #include <iomanip> #include <stdlib.h> using namespace std; int main() { const int N = 6; int matrix,i,j;
C++ Константный указатель на константу меняет значение int d = 7; const int* const cd = &d; d = 8; qDebug()<<*cd; подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
02.12.2015, 17:02     Когда нужно использовать исключения
Цитата Сообщение от Knjagskij Посмотреть сообщение
А мы обязательно должны передавать в исключении объект?
Нет, объектом исключения может быть объект любого типа, даже примитивного (int или const char *).
Цитата Сообщение от Knjagskij Посмотреть сообщение
число 10 - это просто параметр для примера, или в нем есть какой-то смысл?
Просто пример. Тот же код возврата, только переданный внутри объекта исключения.
Вообще, весь код - всего лишь крошечный пример. Функция openfile не возвращает ничего, связанного с, собственно, открытым файлом. Класс исключения не наследуется от std::exception и не переопределяет виртуальный метод what. Используются магические числа. Короче говоря, так писать не надо)

Цитата Сообщение от Knjagskij Посмотреть сообщение
Кстати, в ООП, как я понял, я является признаком хорошего тона возвращать значения атрибутов через методы? Или не обязательно, ведь, одно дело, если мы присваиваем им значения и их нужно проверять, а другое, если мы ничем не рискуем (при присвоении значения чему-либо из атрибута этого класса)
Тут есть несколько слоёв в понимании, почему надо работать с полями через интерфейсные методы доступа.
Первый слой: возможно, на значения, которое может принимать поле, накладываются некоторые ограничения. Тогда в сеттере нужно проверять, подходит ли устанавливаемое значение под эти ограничения. А, возможно, поля у нас read-only. Тогда просто не нужно реализовывать сеттеры.
Второй слой: представим, что мы разрабатываем библиотеку. Библиотека популярна, ей пользуются люди, её форкают на гитхабе, в общем, у неё звёздная жизнь). Мы, как хорошие разработчики, постоянно правим баги и добавляем фичи. И вот есть у нас в библиотеке класс... Совсем, как казалось поначалу, простой класса. И мы подумали, что не стоит вносить сложности в виде методов доступа, а просто сделали его поля публичными. И вот на очередной итерации добавления фич наш простой класс стал усложнятся. Добавилась логика, оказалось, что не любые значения полей валидны, и т.д. Кроме того, некоторые поля оказались избыточными, потому что их значения стало возможно вычислить на основе других полей или ещё как-нибудь. Но наша изначальная ошибка в проектировании связала нам руки. Тысячи пользователей нашей библиотеки по всему миру получают и устанавливают значения полей прямым присваиванием, ведь никакого интерфейса предусмотрено не было. И мы уже не можем ничего поменять, иначе куча ПО, которое использует нашу библиотеку, перестанет компилироваться. Предусмотри мы сразу методы доступа, мы бы могли жонглировать кишками класса как угодно.
Пример: стандартный класс std::vector имеет метод size, который, очевидно, возвращает количество элементов в векторе. Однако в реализации стандартной библиотеки, идущей в комплекте с gcc, например, никакого поля _size в векторе нет. Вектор там определяется указателями на начало и конец массива, а размер его равен _end - _start. Если бы разработчики изначально позволили обращаться к размеру вектора непосредственно через поле, то потом не смогли бы уже удалить это поле из класса, и, если им реально понадобилось бы хранить указатель на конец вектора ещё для каких-либо нужд, им пришлось бы добавить такое поле в дополнение у указателю на начало массива и полю size. Таким образом, грамотный дизайн класса изначально в дальнейшем может помочь сэкономить 4 байта
Но оговорюсь, что не нужно впадать в крайности, как, впрочем, и в любом другом деле. Если класс действительно простой и не грозит в дальнейшем усложниться, например, он представляет какой-либо хорошо изученный объект (реальный или абстрактный), то можно обойтись публичными полями. Скажем, класс Точка на двумерной плоскости. Очевидно, никаких ограничений на координаты не накладывается, и в общем случае эти координаты можно изменять. Так зачем лишний код и, потенциально, лишние такты процессора (если вдруг методы не заинлайнятся)?

Добавлено через 1 минуту
0x10, оу, похоже, я не так понял вопрос про объект в исключении... Думал, речь идёт про передачу какого-либо объекта (в данном случае name типа std::string) в объекте исключения...
 
Текущее время: 07:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru