Запись функций в С++
EDIT: Иногда случается так, что наша проблема не в коде, а в нашем способе судить о том, что правильно и что неправильно. Я пишу свою проблему на примере, поскольку это поможет объяснить это. Проблема заключается в том, что "если наша функция обрабатывает каждое исключение сама по себе. В этом примере я показывал, что иногда он становится запутанным и более похож на то, что записывает один и тот же код во всем мире.
Когда мы пишем код в C своим видом плавного процедурного языка. Поэтому мы справляемся с ситуациями, когда они приходят. Например, учитывая (a, b, c), чтобы найти, какой тип треугольника он (NOT_POSSIBLE, Equilateral, Isosceles, Scalar). Мы вводим их и продолжаем проверять сначала равносторонние, потом равнобедренные, а затем скалярные и т.д.
В C++ мы выполняем функции для проверки этих условий (так что isEuilateral()
и isScalar()
- две функции, которые его проверяют).
Проблема в том, что теперь isScalar()
"должна" проверять, является ли она равносторонней или нет, а затем ее собственное условие или просто ее условия.
Является ли головная боль isScalar()
для проверки того, является ли он равносторонним треугольником или нет, то есть:
if(isEquilateral())
return false;
else if(a==b)
return true;
else if (b==c)
return true;
...
Или начните с себя:
if(a==b) return true; // not checking equilateral
....
Или он должен выполнять свою работу только и выполнять функции. Обязанности программистов должны проверять object.isEquilateral()
перед object.isScalar()
.
поэтому я разработал этот класс api Triangle и отправил его вам. U знаю только имя функции, как isEquilateral() и isIsosceles(), как... поэтому вам назначено задание для создания приложения, которое вводит 3sides треугольника a, b, c и сообщает, что это за треугольник. .. ok.. input 3,3,3, ваша программа тогда должна проверять состояние равностороннего состояния до состояния изосекуляции, а вызов isIsoceles() без вызова isEquilateral() не является безопасным для этого вывода. , isIsoceles() теперь не является независимой функцией. NOt завершен или это не ошибка. что делать?
Ну, на самом деле это пример, который не содержит всю мою путаницу.
Поэтому вопрос заключается в том, что каждая функция обрабатывает каждое исключение явно. Разве это не будет избыточность и дублирование кода.
Обратите внимание, что мы не можем сделать функцию для проверки всех исключений, потому что некоторые исключения здесь не будут исключениями в каком-либо другом месте.
Более простой подход, который я бы использовал, - это функция classifyTriangle
, которая возвращает enum
типов треугольников. Затем любой последующий код может просто обратиться к возвращаемому значению, чтобы действовать в соответствии с типом треугольника.
В качестве альтернативы, я считаю, что каждая функция должна сосредоточиться на проверке своего собственного состояния, независимо от других типов треугольников.
Изменить: теперь, когда я перечитал вопрос, я считаю, что вы спрашиваете о приоритете. Смысл, треугольник может быть равносторонним и равнобедренным, но вы хотите, чтобы он был классифицирован как равносторонний. Если у вас есть функция проверки для каждого типа, вы хотите, чтобы пользователь использовал ваш предопределенный порядок вызова. Это разрешается с помощью функции classifyTrianlge
, где вы можете принять решение о заказе.