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

Операция взятия индексан - C++

Восстановить пароль Регистрация
 
morphling
 Аватар для morphling
-9 / 19 / 1
Регистрация: 26.06.2010
Сообщений: 181
19.08.2011, 12:44     Операция взятия индексан #1
Добрый день))
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
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
#include <tchar.h>
#include <windows.h>
#include <iostream.h>
//#include <cassert.h>
//---------------------------------------------------------------------------
class IntArray
     {
       public:
         //*****************
 
         bool      operator== (const IntArray&)const;
         bool      operator!= (const IntArray&)const;
         IntArray& operator== (const IntArray&);
 
         //*****************
 
         int size() const
              {
               return _size;
              }
 
         //*****************
 
         explicit IntArray(int sz = DefaultArraySize);
                  IntArray(int *array, int array_size);
                  IntArray(const IntArray &rhs);
 
         //*****************
 
          ~IntArray()
             {
                delete[] ia;
             }
 
         //*****************
 
         void sort();
 
         //*****************
 
         int max()const;
 
         //*****************
 
         int min()const;
 
         //*****************
 
         int find(int value)const;
 
         //*****************
       private:
         int _size, *ia, _min, _max, i, j;
         static const int DefaultArraySize = 10;
 
     };
//---Конструктор's------------------------------------------------------------
IntArray::IntArray(int sz)
     {
 
      _size = sz;
      ia = new int[_size];
 
      for(int i = 0; i < _size; ++i)
        ia[i] = i;
 
     }
//---------------------------------------------------------------------------
IntArray::IntArray(int *array, int array_size)
     {
 
        int _size = array_size;
        ia = new int[_size];
 
       for(int i = 0; i < _size; ++i)
         ia[i] = array[i];
 
     }
//---------------------------------------------------------------------------
IntArray::IntArray(const IntArray &rhs)
     {
 
       _size = rhs._size;
       ia = new int[_size];
 
       for(int i = 0; i < _size; ++i)
         ia[i] = rhs.ia[i];
 
     }
//---------------------------------------------------------------------------
int& IntArray::operator[](int index)
//[BCC32 Error] File2.cpp(94): E2316 'operator IntArray::[](int)' is not a member of 'IntArray'
     {
       assert(index >= 0 && index < _size);
       return ia[index];
     }
//---------------------------------------------------------------------------
 
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
 
   IntArray myArray1, myArray2(20);
   int i;
   cout<<"Массив1: "<<endl;
   for(i = 0; i < myArray1.size(); i++)
// ошибка
// [BCC32 Error] File2.cpp(115): E2094 'operator+' not implemented in type 'IntArray' for arguments of type 'int'
      cout<<" "<<myArray1[i];
 
   cout<<"Массив2: "<<endl;
   for(i = 0; i < myArray2.size(); i++)
// ошибка
// [BCC32 Error] File2.cpp(115): E2094 'operator+' not implemented in type 'IntArray' for arguments of type 'int'
      cout<<" "<<myArray2[i];
 
    system("pause");
    return 0;
}
//---------------------------------------------------------------------------
подскажите пожалуйста в чем у меня ошибка...
C++
1
2
3
4
5
6
7
8
//---------------------------------------------------------------------------
int& IntArray::operator[](int index)
//[BCC32 Error] File2.cpp(94): E2316 'operator IntArray::[](int)' is not a member of 'IntArray'
     {
       assert(index >= 0 && index < _size);
       return ia[index];
     }
//---------------------------------------------------------------------------
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2011, 12:44     Операция взятия индексан
Посмотрите здесь:

Класс, реализующий стек. Перегрузка операций взятия и извлечения элемента. C++
C++ Дано целое число N(>0).используя операции деления нацело и взятия остатка от деления, найти количество и сумму его цифр
C++ Операция взятия остатков от деления на цело.
C++ операция <<::>>
C++ есть функция из библиотеки string для взятия из строчки определенного символа?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
19.08.2011, 12:48     Операция взятия индексан #2
morphling, в интерфейсе класса отсутствует объявление этого оператора. Добавь внутрь class прототип
C++
1
int& operator[](int index);
morphling
 Аватар для morphling
-9 / 19 / 1
Регистрация: 26.06.2010
Сообщений: 181
19.08.2011, 13:00  [ТС]     Операция взятия индексан #3
Все спасибо огромнейшее........ наконец то мой первый класс написан!!!

Добавлено через 1 минуту
еще вот assert как работает сможешь объяснить в инете про него читал типо макрос эта)

Добавлено через 10 секунд
еще вот assert как работает сможешь объяснить в инете про него читал типо макрос эта)
zuq
 Аватар для zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
19.08.2011, 13:07     Операция взятия индексан #4
assert это макрос Если в него передать значение которое будет давать false - программа прерывается, с указанием на строку в которой написан assert, вызывающий прерывание
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
19.08.2011, 13:07     Операция взятия индексан #5
Макрос, да.
Если приложение компилируется в режиме отладки (не определён макрос NDEBUG), то если аргумент макроса assert равен 0 (или false) то программа аварийно завершается с выводом номера строки и условия (то есть аргумент assert).
Если же объявлен NDEBUG, то assert полностью выкидывается и его аргумент даже не вычисляется.
То есть запись assert(++i); скорее всего является ошибочной, так как в зависимости от наличия NDEBUG значение i будет или не будет изменяться.
morphling
 Аватар для morphling
-9 / 19 / 1
Регистрация: 26.06.2010
Сообщений: 181
19.08.2011, 13:08  [ТС]     Операция взятия индексан #6
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
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
#include <tchar.h>
#include <windows.h>
#include <iostream.h>
#include <assert.h>
//---------------------------------------------------------------------------
class IntArray
     {
       public:
         //*****************
 
         bool      operator== (const IntArray&)const;
         bool      operator!= (const IntArray&)const;
         IntArray& operator== (const IntArray&);
              int& operator[] (int index);
         //*****************
 
         int size() const
              {
               return _size;
              }
 
         //*****************
 
         explicit IntArray(int sz = DefaultArraySize);
                  IntArray(int *array, int array_size);
                  IntArray(const IntArray &rhs);
 
         //*****************
 
           ~IntArray()
               {
                delete[] ia;
               }
 
         //*****************
 
         void sort();
 
         //*****************
 
         int max()const;
 
         //*****************
 
         int min()const;
 
         //*****************
 
         int find(int value)const;
 
         //*****************
       private:
         int _size, *ia, _min, _max, i, j;
         static const int DefaultArraySize = 10;
 
     };
//---Конструктор's------------------------------------------------------------
IntArray::IntArray(int sz)
     {
 
      _size = sz;
      ia = new int[_size];
 
      for(int i = 0; i < _size; ++i)
        ia[i] = i;
 
     }
//---------------------------------------------------------------------------
IntArray::IntArray(int *array, int array_size)
     {
 
        int _size = array_size;
        ia = new int[_size];
 
       for(int i = 0; i < _size; ++i)
         ia[i] = array[i];
 
     }
//---------------------------------------------------------------------------
IntArray::IntArray(const IntArray &rhs)
     {
 
       _size = rhs._size;
       ia = new int[_size];
 
       for(int i = 0; i < _size; ++i)
         ia[i] = rhs.ia[i];
 
     }
//---------------------------------------------------------------------------
int& IntArray::operator[](int index)
//[BCC32 Error] File2.cpp(94): E2316 'operator IntArray::[](int)' is not a member of 'IntArray'
     {
       assert(index >= 0 && index < _size);
       return ia[index];
     }
//---------------------------------------------------------------------------
 
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
   int mas[5] = {76, 32, 12, 23, 54};
 
   IntArray myArray1, myArray2(20), myArray3(mas, 5);
   int i;
 
 
   cout<<"Массив1: "<<endl;
   for(i = 0; i < myArray1.size(); i++)
      cout<<" "<<myArray1[i];
   cout<<endl;
 
 
   cout<<"Массив2: "<<endl;
   for(i = 0; i < myArray2.size(); i++)
      cout<<" "<<myArray2[i];
     cout<<endl;
 
   cout<<"Массив3: "<<endl;
   for(i = 0; i < myArray3.size(); i++)
      cout<<" "<<myArray3[i];
     cout<<endl;
 
    system("pause");
    return 0;
}
//---------------------------------------------------------------------------
я вот вызвал 2ой конструктор myArray3(mas, 5); а у меня зацикливается и нолики выводит бес конца....

и вот как 3ий конструктор вызывать?

Добавлено через 45 секунд
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
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
#include <tchar.h>
#include <windows.h>
#include <iostream.h>
#include <assert.h>
//---------------------------------------------------------------------------
class IntArray
     {
       public:
         //*****************
 
         bool      operator== (const IntArray&)const;
         bool      operator!= (const IntArray&)const;
         IntArray& operator== (const IntArray&);
              int& operator[] (int index);
         //*****************
 
         int size() const
              {
               return _size;
              }
 
         //*****************
 
         explicit IntArray(int sz = DefaultArraySize);
                  IntArray(int *array, int array_size);
                  IntArray(const IntArray &rhs);
 
         //*****************
 
           ~IntArray()
               {
                delete[] ia;
               }
 
         //*****************
 
         void sort();
 
         //*****************
 
         int max()const;
 
         //*****************
 
         int min()const;
 
         //*****************
 
         int find(int value)const;
 
         //*****************
       private:
         int _size, *ia, _min, _max, i, j;
         static const int DefaultArraySize = 10;
 
     };
//---Конструктор's------------------------------------------------------------
IntArray::IntArray(int sz)
     {
 
      _size = sz;
      ia = new int[_size];
 
      for(int i = 0; i < _size; ++i)
        ia[i] = i;
 
     }
//---------------------------------------------------------------------------
IntArray::IntArray(int *array, int array_size)
     {
 
        int _size = array_size;
        ia = new int[_size];
 
       for(int i = 0; i < _size; ++i)
         ia[i] = array[i];
 
     }
//---------------------------------------------------------------------------
IntArray::IntArray(const IntArray &rhs)
     {
 
       _size = rhs._size;
       ia = new int[_size];
 
       for(int i = 0; i < _size; ++i)
         ia[i] = rhs.ia[i];
 
     }
//---------------------------------------------------------------------------
int& IntArray::operator[](int index)
//[BCC32 Error] File2.cpp(94): E2316 'operator IntArray::[](int)' is not a member of 'IntArray'
     {
       assert(index >= 0 && index < _size);
       return ia[index];
     }
//---------------------------------------------------------------------------
 
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
   int mas[5] = {76, 32, 12, 23, 54};
 
   IntArray myArray1, myArray2(20), myArray3(mas, 5);
   int i;
 
 
   cout<<"Массив1: "<<endl;
   for(i = 0; i < myArray1.size(); i++)
      cout<<" "<<myArray1[i];
   cout<<endl;
 
 
   cout<<"Массив2: "<<endl;
   for(i = 0; i < myArray2.size(); i++)
      cout<<" "<<myArray2[i];
     cout<<endl;
 
   cout<<"Массив3: "<<endl;
   for(i = 0; i < myArray3.size(); i++)
      cout<<" "<<myArray3[i];
     cout<<endl;
 
    system("pause");
    return 0;
}
//---------------------------------------------------------------------------
я вот вызвал 2ой конструктор myArray3(mas, 5); а у меня зацикливается и нолики выводит бес конца....

и вот как 3ий конструктор вызывать? IntArray(const IntArray &rhs);
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
19.08.2011, 13:23     Операция взятия индексан #7
Цитата Сообщение от morphling Посмотреть сообщение
я вот вызвал 2ой конструктор myArray3(mas, 5); а у меня зацикливается и нолики выводит бес конца....
В строке 77 int лишний. Из-за него переменная _size становится локальной, а не членом класса.


Цитата Сообщение от morphling Посмотреть сообщение
и вот как 3ий конструктор вызывать? IntArray(const IntArray &rhs);
C++
1
2
IntArray myArray4(myArray2);
IntArray myArray5 = myArray3;
LosAngeles
Заблокирован
19.08.2011, 13:25     Операция взятия индексан #8
там даже вывода нет, никаких ноликов он выводить не может
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
19.08.2011, 13:31     Операция взятия индексан #9
LosAngeles, да ладно тебе, не конструктор выводит, разумеется. Просто размер в конструкторе не выставляется.
morphling
 Аватар для morphling
-9 / 19 / 1
Регистрация: 26.06.2010
Сообщений: 181
19.08.2011, 13:43  [ТС]     Операция взятия индексан #10
Все все отлично работает сапасибо)

Добавлено через 1 минуту
IntArray& operator= (const IntArray&);

IntArray(const IntArray &rhs);

а это разве не одно и тоже??? и тут и тут через присваение работает?
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
19.08.2011, 13:46     Операция взятия индексан #11
Цитата Сообщение от morphling Посмотреть сообщение
а это разве не одно и тоже???
operator= вызывается, если объект так сказать не новый. То есть:

C++
1
2
3
IntArray ar2(ar0);
// ...
ar2 = ar1; // operator=
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.08.2011, 13:46     Операция взятия индексан #12
Цитата Сообщение от morphling Посмотреть сообщение
а это разве не одно и тоже?
Нет, разумеется. Конструктор копии и оператор присваивания - абсолютно разные вещи. Просто при инициализации одного объекта другим объектом того же класса через = вызывается конструктор копии, на этом сходство заканчивается.
LosAngeles
Заблокирован
19.08.2011, 13:49     Операция взятия индексан #13
нет, это не одно и тоже. Оператор присваивания можно реализовать через КК
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
19.08.2011, 13:50     Операция взятия индексан #14
morphling, что у тебя сообщения дублируются?
Цитата Сообщение от morphling Посмотреть сообщение
IntArray& operator= (const IntArray&);
IntArray(const IntArray &rhs);
а это разве не одно и тоже??? и тут и тут через присваение работает?
Нет, это не одно и то же. Но в моём примере выше в обоих случаях вызывается копирующий конструктор. Это потому, что в выражении
C++
1
IntArray myArray5 = myArray3;
происходит создание нового объекта с инициализацией, поэтому используется конструктор, а не оператор присваивания. Но если дальше написать
C++
1
myArray5 = myArray2;
то здесь будет уже присваивание и вызов соответствующего оператора.

Не по теме:

З.Ы. Как безнадёжно я опоздал

morphling
 Аватар для morphling
-9 / 19 / 1
Регистрация: 26.06.2010
Сообщений: 181
19.08.2011, 14:31  [ТС]     Операция взятия индексан #15
инет медленный очень((( вот и дублируются... один раз отправить нажал ошибка выскакивает обновляю а сообщение уже 2 раза успело отправится(......... все понял щас в чем разница)))) спасибо)) пойду доработывать класс.... и дальше учить)

Добавлено через 27 минут
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
//---------------------------------------------------------------------------
 
#pragma hdrstop
 
 
#include <tchar.h>
#include <windows.h>
#include <iostream.h>
#include <assert.h>
//---------------------------------------------------------------------------
class IntArray
     {
       public:
         //*****************
 
         bool      operator== (const IntArray&)const;
         bool      operator!= (const IntArray&)const;
         IntArray& operator=  (const IntArray&);
              int& operator[] (int index);
         //*****************
 
         int size() const
              {
               return _size;
              }
 
         //*****************
 
         explicit IntArray(int sz = DefaultArraySize);
                  IntArray(int *array, int array_size);
                  IntArray(const IntArray &rhs);
 
         //*****************
 
           ~IntArray()
               {
                delete[] ia;
               }
 
         //*****************
 
         void sort()
              {
               for(i = 0; i < size(); i++)
               for(j = 0; j < size(); j++)
                  {
                    if (ia[j] > ia[i])
                        {
                          temp = ia[j];
                          ia[j] = ia[i];
                          ia[i] = temp;
                        }
                  }
              }
 
         //*****************
 
         int max()
             {
              _max = -1000;
              for(i = 0; i < size(); i++)
                if (ia[i] > _max)
                   {
                     _max = ia[i];
                   }
                return _max;
             }
 
         //*****************
 
         int min()
             {
              _min = 1000;
              for(i = 0; i < size(); i++)
                if (ia[i] < _min)
                   {
                     _min = ia[i];
                   }
                return _min;
             }
 
         //*****************
 
         int find(int value)
             {
              for(i = 0; i < size(); i++)
               if (ia[i] == value)
                  {
                    return i;
                  }
               return -1;
             }
 
         //*****************
       private:
         int _size, *ia, _min, _max, i, j, temp;
         static const int DefaultArraySize = 10;
 
     };
//---Конструктор's------------------------------------------------------------
IntArray::IntArray(int sz)
     {
 
      _size = sz;
      ia = new int[_size];
 
      for(int i = 0; i < _size; ++i)
        ia[i] = i;
 
     }
//---------------------------------------------------------------------------
IntArray::IntArray(int *array, int array_size)
     {
 
        _size = array_size;
        ia = new int[_size];
 
       for(int i = 0; i < _size; ++i)
         ia[i] = array[i];
 
     }
//---------------------------------------------------------------------------
IntArray::IntArray(const IntArray &rhs)
     {
 
       _size = rhs._size;
       ia = new int[_size];
 
       for(int i = 0; i < _size; ++i)
         ia[i] = rhs.ia[i];
 
     }
//---------------------------------------------------------------------------
int& IntArray::operator[](int index)
//[BCC32 Error] File2.cpp(94): E2316 'operator IntArray::[](int)' is not a member of 'IntArray'
     {
       assert(index >= 0 && index < _size);
       return ia[index];
     }
//---------------------------------------------------------------------------
 
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
   SetConsoleCP(1251);
   SetConsoleOutputCP(1251);
   int mas[5] = {76, 32, 12, 23, 54};
 
   IntArray myArray1, myArray2(20), myArray3(mas, 5), myArray4 = myArray3;
   int i;
 
 
   cout<<"Массив1: "<<endl;
   for(i = 0; i < myArray1.size(); i++)
      cout<<" "<<myArray1[i];
   cout<<" Размер: "<<myArray1.size()<<" Мин: "<<myArray1.min() <<" Макс: "<<myArray1.max();
   cout<<endl;
 
   cout<<"Массив2: "<<endl;
   for(i = 0; i < myArray2.size(); i++)
      cout<<" "<<myArray2[i];
   cout<<" Размер: "<<myArray2.size()<<" Мин: "<<myArray2.min() <<" Макс: "<<myArray2.max();
     cout<<endl;
 
   cout<<"Массив3: "<<endl;
   for(i = 0; i < myArray3.size(); i++)
      cout<<" "<<myArray3[i];
   cout<<" Размер: "<<myArray3.size()<<" Мин: "<<myArray3.min() <<" Макс: "<<myArray3.max();
     cout<<endl;
 
   cout<<"Массив4: "<<endl;
   myArray4.sort();
   for(i = 0; i < myArray4.size(); i++)
      cout<<" "<<myArray4[i];
   cout<<" Размер: "<<myArray4.size()<<" Мин: "<<myArray4.min() <<" Макс: "<<myArray4.max();
     cout<<endl;
 
    system("pause");
    return 0;
}
//---------------------------------------------------------------------------
вот вся программа рабочая.... может кому понадобится
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2011, 14:39     Операция взятия индексан
Еще ссылки по теме:

C++ синонимы операций взятия адреса массива (arr и &arr)
Используя одну операцию деления нацело и одну операция взятия остатка от деления найти цифру. соответствующую разряду ты C++
C++ Оператор взятия адреса (&)

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

Или воспользуйтесь поиском по форуму:
fasked
19.08.2011, 14:39     Операция взятия индексан
  #16

Не по теме:

Цитата Сообщение от morphling Посмотреть сообщение
Конструктор's

Yandex
Объявления
19.08.2011, 14:39     Операция взятия индексан
Ответ Создать тему
Опции темы

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