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

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

Войти
Регистрация
Восстановить пароль
 
mgmn
0 / 0 / 0
Регистрация: 01.10.2013
Сообщений: 3
#1

Класс для работы со скалярным типом данных в стиле языка Перл - C++

05.06.2014, 22:44. Просмотров 242. Ответов 2
Метки нет (Все метки)

помогите пожалуйста создать класс для работы со скалярным типом данных в стиле языка Перл. Класс должен быть прозрачен сточки зрения число, строка. Т.е. работа методов класса не зависела бы от того, что в данный момент
хранится в нем число или строка. В класс должны быть включены методы для присваивания и получения
значений setValue и getValue, а также для методы и операторы для выполнения операций сложения или
склейки, вычитания, деления и умножения plus, minus, div, mult. Следует обратить внимание на
возвращаемые значения. Все операции не имеющие смысла для содержащегося в нем значения должны
генерировать исключительную ситуацию и не оказывать воздействия на данные. Также должны быть
перегружены операторы ввода вывода в поток.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2014, 22:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс для работы со скалярным типом данных в стиле языка Перл (C++):

Функции для работы с типом char* - C++
Здравствуйте! Подскажите ресурс, где описана реализация основных функции для работы с указателями на строки

Библиотека для удобной работы с типом string с++ - C++
Привет, надо проводить много манипуляций со строками - обрезка, перенос строки, выравнивание - для интерфейса 3D-игры. Есть ли готовая...

Шаблонный класс для работы с разными типами данных и объявление методов в main - C++
есть класс шаблонный, но не могу объявить методы в main и сделать длядругих типов :(когда делала через шаблонные функции, то программа...

Класс: создать класс Fraction для работы с дробными числами - C++
Необходимо создать класс Fraction для работы с дробными числами. Число должно быть представлено двумя полями: целая часть – длинное целое...

Создать базовый класс - Array и производный класс - Money для работы денежной суммы - C++
ПОМОГИТЕ, ПОЖАЛУЙСТА, С ЗАДАЧЕЙ Создать базовый класс - Array и производный класс - Money для работы денежной суммы

Класс А не принимает член-переменную с типом класс Б - C++
Разработка ведётся в Visual Studio 2010 с использованием MFC Есть некий класс AnswersStatistic, header которого приведён ниже: ...

2
Renji
1925 / 1323 / 298
Регистрация: 05.06.2014
Сообщений: 3,808
06.06.2014, 09:38 #2
помогите пожалуйста создать класс для работы со скалярным типом данных в стиле языка Перл.
"В стиле Перл" тип данных задается используемым оператором. $a+$b - складываются числа. $a.$b - складываются строки. В C++ нельзя перегрузить operator. и уж тем более нельзя ввести новый оператор ne (аналог != для строк). Так что не взлетит.
0
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
06.06.2014, 14:20 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
/////////////////////////////////////////////////////////////////////////////////////////
//Создать класс для работы со скалярным типом данных в стиле языка Перл. Класс должен быть прозрачен 
//с точки зрения число, строка. Т.е. работа методов класса не зависела бы от того, что в данный момент
//хранится в нем число или строка. В класс должны быть включены методы для присваивания и получения
//значений setValue и getValue, а также для методы и операторы для выполнения операций сложения или
//склейки, вычитания, деления и умножения plus, minus, div, mult. Следует обратить внимание на
//возвращаемые значения. Все операции не имеющие смысла для содержащегося в нем значения должны
//генерировать исключительную ситуацию и не оказывать воздействия на данные. Также должны быть
//перегружены операторы ввода вывода в поток.
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <sstream>
#include <stdexcept>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
class  T_scalar
{
    T_str   str_val_;
    //-----------------------------------------------------------------------------------
    friend  std::ostream    &   operator<<
        (
            std::ostream            &   outs,
            T_scalar        const   &   scalar
        )
    {
        outs    <<  scalar.str_val_;
        return  outs;
    }
    //-----------------------------------------------------------------------------------
    friend  T_scalar    operator,
        (
            T_scalar    L,
            T_scalar    R
        );
    //-----------------------------------------------------------------------------------
public:
    //-----------------------------------------------------------------------------------
    T_scalar( T_str const   &   str =   T_str() )
        :
        str_val_( str )
    {}
    //-----------------------------------------------------------------------------------
    T_scalar( int n )
        :
        str_val_    (
                        num_to_str( n )
                    )
    {}
    //-----------------------------------------------------------------------------------
    T_scalar    operator+= ( T_scalar   scalsr )
    {
        int     L;
        int     R;
        bool    bool_res    =       successfully_get_num_from_str(  str_val_,           L   )
                                &&  successfully_get_num_from_str(  scalsr.str_val_,    R   );
 
        if( !bool_res )
        {
            throw   std::invalid_argument("нечисловой аргумент в числовой операции");
        }
 
        str_val_    =   num_to_str( L += R );
        return  *this;
    }
    //-----------------------------------------------------------------------------------
private:
    //-----------------------------------------------------------------------------------
    bool  successfully_get_num_from_str
        (
            T_str   const   &   str,
            int             &   n
        )
    {
        T_str    const   FINISH_STR     =   "$$$";
        std::istringstream  ssin( str + FINISH_STR );
        ssin    >>  n;
        T_str   s;
        ssin    >>  s;
        return  s == FINISH_STR;
    }
    //-----------------------------------------------------------------------------------
    T_str   num_to_str( int  n )
    {
        std::ostringstream  sout;
        sout    <<  n;
        return  sout.str();
    }
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
T_scalar    operator+
    (
        T_scalar    L,
        T_scalar    R
    )
{
    return  L += R;
}
/////////////////////////////////////////////////////////////////////////////////////////
T_scalar    operator,
    (
        T_scalar    L,
        T_scalar    R
    )
{
    return  T_scalar( L.str_val_ + R.str_val_ );
}
/////////////////////////////////////////////////////////////////////////////////////////
int  main()
{
    std::locale::global(std::locale(""));
    try
    {
        T_scalar    A = "5555";
        T_scalar    B = 4;
 
        std::cout   <<  ( A, B, A )
                    <<  std::endl;
 
        std::cout   <<  ( A, B )
                    <<  std::endl;
 
        std::cout   <<  T_str("101") + B
                    <<  std::endl;
 
        std::cout   <<  B   +   T_str("101")
                    <<  std::endl;
 
        std::cout   <<  1000   +   T_str("101")
                    <<  std::endl;
 
        std::cout   <<  T_str("101")    +   1000
                    <<  std::endl;
 
        std::cout   <<  T_str("101") + T_str("101")
                    <<  std::endl;
 
        std::cout   <<  ( T_str("101") , T_str("101") )
                    <<  std::endl;
 
        std::cout   <<  ( T_str("101") , 15 )
                    <<  std::endl;
 
        std::cout   <<  20 + B
                    <<  std::endl;
 
        std::cout   <<  B + 20
                    <<  std::endl;
 
        std::cout   <<  5 + T_str("1000") + 10
                    <<  std::endl;
 
        std::cout   <<  T_str("abba") + 4
                    <<  std::endl;
    }
    catch( std::exception&  e )
    {
        std::cout   <<  e.what()
                    <<  std::endl;
    }
 
    system( "pause" );
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2014, 14:20
Привет! Вот еще темы с ответами:

Класс с неопределенным типом данных - Visual C++
Алоха, друзья. Попытался я значится сделать класс для обработки разных типов данных. Немного покумекав взял за основу старый добрый вектор....

Класс для работы с базой данных - Java SE
Подскажите, пожалуйста, гарантирует ли данный класс закрытие connection по завершению работы с ним ? И выскажите свое мнение по поводу...

Класс для работы с базой данных на singleton - PHP ООП
использую класс для глобального доступа к единственному экземпляру объекта PDO: class DB { private static $_instance = null; ...

Разработка программ работы с символьным типом данных в консольном приложении - Delphi
Написать программу которая вводит символьный массив из 19-ти или меньшего количества элементов и находит среди них элемент с наименьшим...


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

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

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