0 / 0 / 0
Регистрация: 18.02.2014
Сообщений: 36
1

Валидация данных в конструкторе

24.06.2016, 10:25. Показов 2900. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
Такая проблема: мне нужно считать из файла данные (размер массива и массив) и занести их в объект (в конструкторе). Но что делать, если считанные данные не те (возможно, конец файла, или данные не полные)? Как лучше всего реализовать вариацию данных в конструкторе? Exception не предлагать, этот вариант не пойдет. Выслушаю все остальные предложения. Спасибо
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.06.2016, 10:25
Ответы с готовыми решениями:

защита от некорректных данных в конструкторе
Здравствуйте, вот пишу довольно тривиальный класс о представлении треугольника. Поля класса -...

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

Валидация данных
Имеется обычная форма для изменения Price (decimal) с client validation. Когда вводишь через...

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

2
2782 / 1935 / 570
Регистрация: 05.06.2014
Сообщений: 5,600
24.06.2016, 10:53 2
Ну, если не хотите исключения...
1) setjmp/longjmp - выбор настоящих месье знающих толк в Си-стиле.
2) Используете вместо конструктора bool init(bla-bla-bla). Вернул метод true - валидация прошла. Не вернул - что-то глюкануло. Но это уже для месье начинающих, которые все еще колеблются между брюнеточкой и курочкой.
0
693 / 303 / 99
Регистрация: 04.07.2014
Сообщений: 846
24.06.2016, 14:40 3
Лучший ответ Сообщение было отмечено roma_m как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <math.h>
#include <memory>
 
class Triangle {
private:
  double a_;
  double b_;
  double c_;
 
  Triangle(double a, double b, double c)
      : a_(a)
      , b_(b)
      , c_(c) {};
 
  static bool isValidSizes(double a, double b, double c)
  {
    const double e = 1e-10;
    return (a > 0) && (b > 0) && (c > 0) && isnormal(a) && isnormal(b) && isnormal(c) && (a < b + c + e) &&
           (a + e > fabs(b - c)) && (b < a + c + e) && (b + e > fabs(a - c)) && (c < a + b + e) &&
           (c + e > fabs(a - b));
  }
 
public:
  static std::shared_ptr<Triangle> create(double a, double b, double c)
  {
    std::shared_ptr<Triangle> result;
    if (isValidSizes(a, b, c)) {
      result = std::shared_ptr<Triangle>(new Triangle(a, b, c));
    } else {
      result = std::shared_ptr<Triangle>();
    }
    return result;
  };
 
  double getA() const
  {
    return a_;
  };
 
  double getB() const
  {
    return b_;
  };
 
  double getC() const
  {
    return c_;
  };
};
 
void print(std::shared_ptr<const Triangle> t)
{
  if (t) {
    std::cout << "[" << t->getA() << ", " << t->getB() << ", " << t->getC() << "]\n";
  } else {
    std::cout << "[ Error ]\n";
  }
}
 
int main()
{
  print(Triangle::create(1.0, 1.0, 1.0));
  print(Triangle::create(1.0, 2.0, 3.0));
  print(Triangle::create(1.0, 1.0, 100.0));
  print(Triangle::create(1.0 / 0.0, 2.0, 3.0));
  return 0;
}
0
24.06.2016, 14:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.06.2016, 14:40
Помогаю со студенческими работами здесь

Валидация данных
Подключил валидацию следующим образом: public interface IDataErrorInfo { ...

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

Ввод данных в конструкторе
Имеется код: class Personnel { public string Name; //Имя персонала public...

Не работает валидация данных
Добрый день, дорогие форумчане! Сижу уже 30 минут и ломаю себе голову, все до этого представления...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru