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

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

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

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

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

помогите пожалуйста создать класс для работы со скалярным типом данных в стиле языка Перл. Класс должен быть прозрачен сточки зрения число, строка. Т.е. работа методов класса не зависела бы от того, что в данный момент
хранится в нем число или строка. В класс должны быть включены методы для присваивания и получения
значений setValue и getValue, а также для методы и операторы для выполнения операций сложения или
склейки, вычитания, деления и умножения plus, minus, div, mult. Следует обратить внимание на
возвращаемые значения. Все операции не имеющие смысла для содержащегося в нем значения должны
генерировать исключительную ситуацию и не оказывать воздействия на данные. Также должны быть
перегружены операторы ввода вывода в поток.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2014, 22:44     Класс для работы со скалярным типом данных в стиле языка Перл
Посмотрите здесь:
C++ Функции для работы с типом char*
Библиотека для удобной работы с типом string с++ C++
Шаблонный класс для работы с разными типами данных и объявление методов в main C++
Класс А не принимает член-переменную с типом класс Б C++
C++ Класс Random в стиле .Net Framework
Класс для работы с векторами. C++
C++ Класс С++ для работы с треугольником
C++ Класс для работы с книгами
C++ Класс для работы со временем
C++ Класс для работы со стеком
C++ Класс для работы с файлом.
Класс для работы с файлами C++

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

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

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