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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ "Пробег" по массиву. http://www.cyberforum.ru/cpp-beginners/thread352398.html
Здравствуйте! Стоит следующая задача: Программе необходимо проверить длину серии одинаковых элементов массива. И вывести максимальную длину серии. Например, для следующего массива из 20...
C++ Подскажите как прочитать целочисленное значение из string. Помогите! Есть файл содержащий значения для некоторых целочисленных переменных в виде "имя = значение": vn1 = 11 vn2 = 131 vn3 = 74 *Числа могут быть либо трёхзначные, либо двухзначные. Вопрос... http://www.cyberforum.ru/cpp-beginners/thread352393.html
C++ Как выучить C++?
Привет всем! У меня такой вопрос тем кто учил или учит C++: Как выучить C++? А именно меня интересует какую литературу прочитать, может быть какието подборки книг что бы не чего не упустить. На...
C++ как правльно вовести результат с помощью файлов
#include <iostream> #include <stream> using namespace std; int main() { ifstream in; ofstream out; in.open ("input.txt"); out.open("output.txt");
C++ Обратный порядок цифр в числе http://www.cyberforum.ru/cpp-beginners/thread352373.html
После ввода числа (in) не выводится выходное число (out). Код: #include <iostream> #define STEP 10 using namespace std; int main() { int in;
C++ Консоль. Чисто технический вопрос. Вопрос такой. Как работать с консолью?.. Нет, первая мысль плохая. Может я плохо выразился. Впрочем - скорее всего. Поясняю. Есть программа, написанная на C#. Она скачивает из ин-та страничку и... подробнее

Показать сообщение отдельно
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
20.09.2011, 21:50  [ТС]
вот пример файл 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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru