Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2011, 19:22   #1
fort-_-minor
46KSS
Пользователь
 
Аватар для fort-_-minor
 
Регистрация: 26.07.2010
Сообщений: 58
По умолчанию реализовать методы класса Sint (secure integer)

Доброго времени суток всем. Задание такое:
Реализовать методы класса Sint (secure integer). Класс должен представлять все возможности типа int языка С++, все разрешенные для него операции. Особенностью класса Sint является генерация исключений при возникновении ошибок в ходе выполнения операций:
при переполнении (знаковом и беззнаковом);
усечение результата
преобразования между знаковыми и беззнаковыми типами
Класс должен быть реализован в файле Sint.cpp, делать реализацию кроссплатформенной необязательно
(то есть делать либо для Visual Studio либо для gcc). Разрешается использовать код из библиотеки IntegerLib.

Алгоритм такой:
скачиваете IntegerLib, разрабатываете класс, перегружающий все математические операторы, операторы присваивания различных форм и т.п., используя эту библиотеку. Будет достаточно вызвать set_constraint_handler_s передав указатель на функцию, которая будет генерить исключения. Библиотека будет автоматически ее звать при переполнении и т.д.

Помогите пожалуйста написать код программы, спасибо.
fort-_-minor вне форума Ответить с цитированием
Старый 18.09.2011, 19:25   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Давайте ваш код, мы поможем. А то тут многовато писать.
Carbon вне форума Ответить с цитированием
Старый 18.09.2011, 19:31   #3
fort-_-minor
46KSS
Пользователь
 
Аватар для fort-_-minor
 
Регистрация: 26.07.2010
Сообщений: 58
По умолчанию

как такового кода еще нету, начало учебного года, задание к 1 лабораторной которая будет на етой неделе (на ней собственно и будем писать с помощью преподавателя), просто хотелось бы сделать заранее чтоб пойти сразу на защиту, свой уровень владения с++ не позволяет... знаю что это запрещено правилами форума открыто просить помощи аля вот помогите, поэтому постарался вникнуть в курс проблемы, на другом форуме вот написали алгоритм решения... возможно найдется здесь человек которому не трудно будет написать етот код, у нас на потоке вряд ле найдется кто то кто справиться с етим в одиночку, хотя уровень программирвания выше среднего. собственно вот суть, если кто поможет буду очень благодарен.
fort-_-minor вне форума Ответить с цитированием
Старый 20.09.2011, 22:04   #4
fort-_-minor
46KSS
Пользователь
 
Аватар для fort-_-minor
 
Регистрация: 26.07.2010
Сообщений: 58
По умолчанию

вот пример: файл sint.cpp
Код:
// 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
Код:
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;
};
fort-_-minor вне форума Ответить с цитированием
Старый 21.09.2011, 22:43   #5
fort-_-minor
46KSS
Пользователь
 
Аватар для fort-_-minor
 
Регистрация: 26.07.2010
Сообщений: 58
По умолчанию

помогите пожалуйста с решением задачи, очень надо!
fort-_-minor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операции и перегруженные методы класса. Necare Помощь студентам 2 01.12.2010 19:21
Методы класса Date. Sakura_Vamp Помощь студентам 1 30.05.2010 18:41
C++, методы строкового класса Akord Помощь студентам 0 07.12.2009 17:16
массив указателей на методы класса? cout Общие вопросы C/C++ 2 08.05.2008 09:43
Классы и методы класса Exploit Помощь студентам 9 17.12.2006 18:21