2011-08-28 2 views
0

EDIT: Иногда случается так, что наша проблема не в коде, а в нашем способе судить о том, что правильно и что неправильно. Я пишу свою проблему на примере, поскольку это поможет объяснить это. Проблема заключается в том, что «если наша функция обрабатывает каждое исключение сама по себе. В примере, который я продемонстрировал, он иногда становится запутанным и более похож на то, что записывает один и тот же код во всем мире.Письменные функции в C++

Когда мы пишем код на языке 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 завершен или это не ошибка. что делать?

Ну, на самом деле это пример, который не содержит все мое замешательство.

Вопрос в том, должна ли каждая функция обрабатывать каждое исключение явно. Разве это не будет избыточность и дублирование кода.

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

+6

Боюсь, я нахожу этот вопрос очень неясным. Почему вы предполагаете, что есть способ, которым вы * имеете * делать что-то на C и на C++? C++ поддерживает многие парадигмы, и если вы хотите, вы можете писать в том же стиле, что и в C ... Какова идея здесь? У вас есть код C, для которого вы ищете хороший объектно-ориентированный дизайн на C++? –

ответ

3

Простой подход, который я бы использовал, - это функция classifyTriangle, которая возвращает типы треугольников enum. Затем любой последующий код может просто обратиться к возвращаемому значению, чтобы действовать в соответствии с типом треугольника.

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

Редактировать: Теперь, когда я перечитал вопрос, я считаю, что вы спрашиваете о приоритете. Смысл, треугольник может быть равносторонним и равнобедренным, но вы хотите, чтобы он был классифицирован как равносторонний. Если у вас есть функция проверки для каждого типа, вы хотите, чтобы пользователь использовал ваш предопределенный порядок вызова.Это разрешается с помощью функции classifyTrianlge, где вы можете принять решение о заказе.

+0

Абсолютно вы правы в этом вопросе. Но вопрос в том, должна ли каждая функция обрабатывать каждое исключение явно. и, как и каждая функция, будет обрабатывать каждое исключение в iteslf, не так ли. c –

+0

Как я уже сказал, консолидированная функция может помочь избежать дублирования обработки исключений. Если это возможно, попробуйте включить все свои функции в одну функцию (или сделать одну функцию для проверки всех исключений, которые будут использоваться всеми). Без дополнительной информации о вашем фактическом коде вам будет сложно помочь вам более точно. –

Смежные вопросы