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

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

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

C++ Класс для работы с файлом.
C++ Класс Random в стиле .Net Framework
Класс для работы с матрицами C++
C++ Класс для работы с матрицами
Библиотека для удобной работы с типом string с++ C++
класс А не принимает член-переменную с типом класс Б C++
C++ Класс С++ для работы с треугольником
C++ Класс для работы с книгами

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Renji
1535 / 983 / 240
Регистрация: 05.06.2014
Сообщений: 2,963
06.06.2014, 09:38     Класс для работы со скалярным типом данных в стиле языка Перл #2
помогите пожалуйста создать класс для работы со скалярным типом данных в стиле языка Перл.
"В стиле Перл" тип данных задается используемым оператором. $a+$b - складываются числа. $a.$b - складываются строки. В C++ нельзя перегрузить operator. и уж тем более нельзя ввести новый оператор ne (аналог != для строк). Так что не взлетит.
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
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" );
}
Yandex
Объявления
06.06.2014, 14:20     Класс для работы со скалярным типом данных в стиле языка Перл
Ответ Создать тему
Опции темы

Текущее время: 07:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru