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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
#1

Реализовать методы класса Sint (secure integer) - C++

17.09.2011, 01:52. Просмотров 859. Ответов 12
Метки нет (Все метки)

Доброго времени суток всем. Задание такое:
Реализовать методы класса Sint (secure integer). Класс должен представлять все возможности типа int языка С++, все разрешенные для него операции. Особенностью класса Sint является генерация исключений при возникновении ошибок в ходе выполнения операций:
  • при переполнении (знаковом и беззнаковом);
  • усечение результата
  • преобразования между знаковыми и беззнаковыми типами
Класс должен быть реализован в файле Sint.cpp, делать реализацию кроссплатформенной необязательно
(то есть делать либо для Visual Studio либо для gcc). Разрешается использовать код из библиотеки IntegerLib.
Хрен его знает как подойти к решению задачи, обьясните пожалуйста кто может
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2011, 01:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализовать методы класса Sint (secure integer) (C++):

Методы класса внутри определения класса - C++
Все привет! Решил закрепить свои знания по C++, читаю Р.Лафоре - "Объектро-ориентированное программирование в C++". В книге, на...

Реализация расширенного класса Integer - C++
Всем привет. Хочу реализовать аналог класса Integer в котором можно буде проводить операции с числами любой разрядности. Начал пока с...

Реализовать подсчет количества объектов класса, используя статическую переменную-член класса - C++
как реализовать подсчет количества объектов класса (используя статическую переменную-член класса), а также статическую функцию, которая...

Реализовать оператор= для присваивания объекта класса-потомка объекту базового класса - C++
Есть два класса A и B, причем класс B является потомком A. Как реализовать следующее: obj_A = obj_B и obj_B = obj_A? Добавлено через 9...

методы класса - C++
Доброго времени суток! Заранее извиняюсь за тупку. Чем отличаются вызовы c.printMe(); c.printMe; Первый понятно,...

Методы класса - C++
Я щас организую разреженную матрицу через двусвязный упорядоченый циклический список... ну да не суть. У меня такой вопрос - я сейчас...

12
alkagolik
Заблокирован
17.09.2011, 04:56 #2
похоже на .dll(windows), .so(unix), не?
ограничить побитово
1
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
17.09.2011, 11:10  [ТС] #3
есть еще у кого мысли?
0
CyBOSSeR
Эксперт С++
2305 / 1675 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
17.09.2011, 12:41 #4
fort-_-minor, скачиваете IntegerLib, разрабатываете класс, перегружающий все математические операторы, операторы пристваивания различных форм и т.п., используя эту библиотеку. Судя по исходам Вам будет достаточно вызвать set_constraint_handler_s передав указатель на функцию, которая будет генерить исключения. Библиотека будет автоматически ее звать при переполнении и т.д.
0
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
20.09.2011, 21:50  [ТС] #5
вот пример файл sint.cpp
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// sint.cpp :Secure Integer Class
// this file contains a sample test program that may be used to test your solution
// the actual test program may contain additional tests
 
#include <iostream>
#include "sint.h"
using namespace std;
 
// sint class implementation goes here
 
int main(void) {
    signed char c1 = 5;
    signed char c2 = 12;
    signed char c3 = 127;
 
    sint sc1(c1);
    sint sc2(c2);
    sint sc3(c3);
 
    try {
        sc1 = sc1;
        cout << "sc1 = " << sc1 << endl;
 
        sc1 = sc1 + sc2;
        cout << "sc1 = " << sc1 << endl;
 
        sc2 = sc2 + 4;
        cout << "sc2 = " << sc2 << endl;
 
        sc2 = 7 + sc2;
        cout << "sc2 = " << sc2 << endl;
 
        sc2 = -125;
        cout << "sc2 = " << sc2 << endl;
 
        sc2 = sc1 + sc3 + sc2;
        cout << "sc2 = " << sc2 << endl;
 
        sc1 = sc2 + sc1 + 10;
        cout << "sc1 = " << sc1 << endl;
    }
    catch (SignError ie) {
        cerr << "Sign error" << endl;
    }
    catch (RangeError ie) {
        cerr << "Range error" << endl;
    }
    catch (Overflow ie) {
        cerr << "Overflow" << endl;
    }
 
    try {
        sc2 = sc1 + sc3;
        cout << "sc2 = " << sc2 << endl;
    }
    catch (SignError ie) {
        cerr << "Sign error" << endl;
    }
    catch (RangeError ie) {
        cerr << "Range error" << endl;
    }
    catch (Truncation) {
        cerr << "Truncation" << endl;
    }
    catch (Overflow ie) {
        cerr << "Overflow" << endl;
    }
 
    signed int si1 = 10;
    signed int si2 = 100;
 
    sint ssi1(si1);
    sint ssi2(si2);
 
    ssi1 = ssi1 + ssi2;
    ssi2 = ssi2 + si2;
 
    unsigned int ui1 = 56;
    unsigned int ui2 = 32;
    sint sui1(ui1), sui2(ui2);
    sui1 = sui1 + ui2;
    sui2 = sui1 + sui2;
 
    // conversions
 
    sui2 = ssi1 + sc2;
 
    sint i(10), j(12);
    i = c1 + c2;
    i = j + 7;
    i = 5 + j;
    i = j + i + 5;
 
    return 0;
}
файл sint.h
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
69
70
71
72
73
74
class IntError {};
class Overflow : public IntError {};
class DivideByZero : public IntError {};
class Truncation : public IntError {};
class SignError: public IntError {};
class RangeError: public IntError {};
class UnknownIntegerType : public IntError {};
 
class sint {
public:
    // don't use char without a sign, not supported
    typedef enum { signed_char = 1, signed_short = 2, signed_int = 3,
           signed_long = 4, signed_long_long = 5,
           unsigned_char = 6, unsigned_short = 7, unsigned_int = 8,
           unsigned_long = 9, unsigned_long_long = 10} integer_type;
 
    typedef union sinteger_ {
        signed char sc;
        signed short ss;
        signed int si;
        signed long sl;
        signed long long sll;
        unsigned char uc;
        unsigned short us;
        unsigned int ui;
        unsigned long ul;
        unsigned long long ull;
    } sinteger;
 
    sint(const signed char sc);
    sint(const signed int short ss);
    sint(const signed int init);
    sint(const signed long init);
    sint(const signed long long init);
    sint(const unsigned char uc);
    sint(const unsigned int short us);
    sint(const unsigned int init);
    sint(const unsigned long init);
    sint(const unsigned long long init);
 
    sint & operator= (const sint& rhs);
    sint & operator= (const signed char& rhs);
    sint & operator= (const signed short& rhs);
    sint & operator= (const signed int& rhs);
    sint & operator= (const signed long& rhs);
    sint & operator= (const signed long long& rhs);
    sint & operator= (const unsigned char& rhs);
    sint & operator= (const unsigned short& rhs);
    sint & operator= (const unsigned int& rhs);
    sint & operator= (const unsigned long& rhs);
    sint & operator= (const unsigned long long& rhs);
 
    const sint operator+ (const sint& rhs) const;
    const sint operator+ (const signed char&) const;
    const sint operator+ (const signed short&) const;
    const sint operator+ (const signed int& rhs) const;
    const sint operator+ (const signed long& rhs) const;
    const sint operator+ (const signed long long& rhs) const;
    const sint operator+ (const unsigned char&) const;
     const sint operator+ (const unsigned short&) const;
    const sint operator+ (const unsigned int& rhs) const;
    const sint operator+ (const unsigned long& rhs) const;
    const sint operator+ (const unsigned long long& rhs) const;
 
    const bool is_signed();
    const bool is_unsigned();
    const signed long long get_signed_value();
    const unsigned long long get_unsigned_value();
    const char *get_type();
 
private:
    sinteger i;
    integer_type descriminator;
};
0
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
21.09.2011, 22:15  [ТС] #6
ребят, помогите пожалуйста с решением этой задачи, очень надо!
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.09.2011, 22:25 #7
Цитата Сообщение от fort-_-minor Посмотреть сообщение
ребят, помогите пожалуйста с решением этой задачи, очень надо!
вы же её уже решили постом выше
0
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
21.09.2011, 22:32  [ТС] #8
ето пример решения.... надо что то свое придумать, вчера сегодня сидел над классами и стрктурами понял кое че, но чтобы полностью написать программу самому не по силам... поэтому прочитайте условие пожалуйста кому не трудно и сделайте как считаете нужным (как бы вы решили ету задау).
буду очень благодарен если кто то поможет...
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.09.2011, 22:34 #9
Цитата Сообщение от fort-_-minor Посмотреть сообщение
но чтобы полностью написать программу самому не по силам...
показывайте что написали, наше решение покажется вам еще более сложным
0
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
21.09.2011, 22:40  [ТС] #10
пример решения есть) пусть не мой но он есть, а по примеру сделать для толкового программера не так сложно) я не могу разобраться в сути задания, а вы мне говорите скидывайте ваш код) глупо получается, вопросов нет, спасибо)
пусть код который вы напишите будет неоткомпилирован или немного неправильный, но в нем легче разобраться чем писать самому с нуля...
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.09.2011, 22:47 #11
Цитата Сообщение от fort-_-minor Посмотреть сообщение
но в нем легче разобраться чем писать самому с нуля...
у вас уже есть код для разбора, читайте книги по С++, начиная с темы классов и заканчивая перегрузкой операторов и наследванием
один день интенсивного изучения и сами сможете написать
1
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
21.09.2011, 22:57  [ТС] #12
спасибо, тогда вопрос: напишите пожалуйста по пунктам что нужно сделать( ну или сформулируйте задание с вашей точки зрения) если не трудно
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.09.2011, 23:11 #13
например:
-конструктор с одним параметром по умолчанию равным нулю
-перегрузить все допустимые для обчного int операторы, выполняя в них соответсвующие проверки на переполнение
в случае переполнения бросать исключение(еще одна тема к изучению)
-два статических метода возвращающих максимальное и минимальное допустимые значения
1
21.09.2011, 23:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2011, 23:11
Привет! Вот еще темы с ответами:

Реализовать шаблонные методы - C++
Код, который создает динамический массив и выводит на экран. #include &lt;iostream&gt; using namespace std; class clArrSort{ ...

Методы строкового класса - C++
Нужно разработать реализацию класса string, позволяющего оперировать с текстовыми строками, как с базовыми типами данных. Класс должен...

Виртуальные методы класса - C++
Скажите, зачем нужны виртуальные методы? Почему нельзя использовать стандартные? Спасибо.

протестировать методы класса - C++
У меня есть класс &quot;вектор&quot;. В нём добавила метод, который вычисляет длину вектора и перегрузила функции +,-,=. Нужно протестировать все...


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

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

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