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

Использование собственного класса строк - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.68
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
15.01.2012, 23:22     Использование собственного класса строк #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
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
class MyString
{
    private:
        size_t length;
        char *str;
 
    public:
        MyString ();
        MyString (const char *c);
        MyString (const MyString& t);
        ~MyString ();
 
        MyString& operator= (const MyString& t);
        MyString operator+ (const MyString& t) const;
        MyString operator+ (const char *c) const;
        bool operator== (const MyString& t) const;
        bool operator!= (const MyString& t) const;
        void operator+= (const MyString& t);
        char& operator[] (size_t i);
 
        char& at (size_t i);
        void get_input (std::istream& in);
        size_t size () const;
        size_t get_length () const;
 
        friend std::ostream& operator<< (std::ostream& out, const MyString& t);
        friend std::istream& operator>> (std::istream& in, MyString& t);
};
 
MyString::MyString ()
{
    length = 0;
    str = NULL;
}
 
MyString::MyString (const char *c)
{
    length = strlen (c) + 1;
    str = new char[length];
    strcpy (str, c);
    str[length-1] = '\0';
}
 
MyString::MyString (const MyString& t)
{
    length = strlen (t.str) + 1;
    str = new char[length];
    strcpy (str, t.str);
    str[length-1] = '\0';
}
 
MyString::~MyString ()
{
    if (str != NULL)
    {
        delete[] str;
    }
}
 
MyString& MyString::operator= (const MyString& t)
{
    length = strlen (t.str) + 1;
    str = new char[length];
    strcpy (str, t.str);
    str[length-1] = '\0';
 
    return *this;
}
 
MyString MyString::operator+ (const MyString& t) const
{
    char* newStr = new char[strlen (str) + strlen (t.str) + 1];
    strcpy (newStr, str);
    strcat (newStr, t.str);
    newStr[length-1] = '\0';
 
    MyString returnObj (newStr);
    delete[] newStr;
 
    return returnObj;
}
 
bool MyString::operator== (const MyString& t) const
{
    return (strcmp(str, t.str) == 0);
}
 
bool MyString::operator!= (const MyString& t) const
{
    return (strcmp(str, t.str) != 0);
}
 
void MyString::operator+= (const MyString& t)
{
    length = strlen (str) + strlen (t.str) + 1;
    char *newStr = new char[length];
    strcpy (newStr, str);
    strcat (newStr, t.str);
    strcpy (str, newStr);
    str[length-1] = '\0';
    delete[] newStr;
}
 
char& MyString::operator[] (size_t i)
{
    return str[i];
}
 
char& MyString::at (size_t i)
{
    if (i >= 0 && i < length)
    {
        return str[i];
    }
}
 
void MyString::get_input (std::istream& in)
{
    while (true)
    {
        char c = in.get ();
 
        if (c == '\n')
        {
            break;
        }
 
        if (length == 0)
        {
            length = 2;
        }
        else
        {
            ++length;
        }
 
        char* newStr = new char[length];
        if (str != NULL)
        {
            strcpy (newStr, str);
        }
        newStr[length-2] = c;
        newStr[length-1] = '\0';
 
        delete[] str;
 
        str = newStr;
    }
}
 
size_t MyString::size () const
{
    return length;
}
 
size_t MyString::get_length () const
{
    if (length == 0)
    {
        return 0;
    }
    else
    {
        return (length - 1);
    }
}
 
std::ostream& operator<< (std::ostream& out, const MyString& t)
{
    out << t.str;
    return out;
}
 
std::istream& operator>> (std::istream& in, MyString& t)
{
    t.get_input (in);
    return in;
}
Всё ли здесь так, как надо?

Что бы вы предложили добавить сюда и каким образом?

Заранее благодарю за возможные ответы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
19.01.2012, 23:32     Использование собственного класса строк #41
C++
1
2
3
4
const char* MyString::c_str () const
{
    return str;
}
так
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.01.2012, 23:33     Использование собственного класса строк #42
retmas, или даже так?
C++
1
2
3
4
const char* MyString::c_str () const
{
    return str;
}
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
19.01.2012, 23:34     Использование собственного класса строк #43
да) копипаст всему виной)
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.01.2012, 23:35     Использование собственного класса строк #44
retmas, а я вообще сначала только на return str; глянул))
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
19.01.2012, 23:51  [ТС]     Использование собственного класса строк #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
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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
class MyString
{
    private:
        size_t length;
        char *str;
 
        void from_c_str (const char *other);
 
    public:
        MyString ();
        MyString (const char *c);
        MyString (const MyString& t);
        ~MyString ();
 
        MyString& operator= (const MyString& t);
        MyString& operator= (const char *c);
        MyString& operator+= (const MyString& t);
        char& operator[] (size_t i);
        const char& operator[] (size_t i) const;
 
        char& at (size_t i);
        const char& at (size_t i) const;
        void getline (std::istream& in);
        size_t get_length () const;
        const char* c_str () const;
 
        friend std::ostream& operator<< (std::ostream& out, const MyString& t);
        friend std::istream& operator>> (std::istream& in, MyString& t);
 
        friend bool operator< (const MyString& t, const char *c);
        friend bool operator< (const MyString& t, const MyString& t1);
        friend bool operator< (const char *c, const MyString& t);
 
        friend bool operator<= (const MyString& t, const char *c);
        friend bool operator<= (const MyString& t, const MyString& t1);
        friend bool operator<= (const char *c, const MyString& t);
 
        friend bool operator> (const MyString& t, const char *c);
        friend bool operator> (const MyString& t, const MyString& t1);
        friend bool operator> (const char *c, const MyString& t);
 
        friend bool operator>= (const MyString& t, const char *c);
        friend bool operator>= (const MyString& t, const MyString& t1);
        friend bool operator>= (const char *c, const MyString& t);
};
 
MyString::MyString ()
{
    length = 1;
    str = new char[length];
    *str = '\0';
}
 
MyString::MyString (const char *c)
{
    from_c_str (c);
}
 
MyString::MyString (const MyString& t)
{
    from_c_str (t.str);
}
 
MyString::~MyString ()
{
    delete[] str;
}
 
MyString& MyString::operator= (const MyString& t)
{
    if (this == &t)
    {
        return *this;
    }
    from_c_str (t.str);
 
    return *this;
}
 
MyString& MyString::operator= (const char *c)
{
    from_c_str (c);
 
    return *this;
}
 
MyString operator+ (const MyString& left, const MyString& right)
{
    return MyString(left) += right;
}
 
bool operator== (const MyString& t, const MyString& t1)
{
    return (strcmp(t.c_str(), t1.c_str()) == 0);
}
 
bool operator!= (const MyString& t, const MyString& t1)
{
    return !(operator== (t, t1));
}
 
bool operator< (const MyString& t, const char *c)
{
    return ((t.get_length () < strlen (c)) ? true : false);
}
 
bool operator< (const MyString& t, const MyString& t1)
{
    return ((t.get_length () < t1.get_length ()) ? true : false);
}
 
bool operator< (const char *c, const MyString& t)
{
    return ((strlen (c) < t.get_length ()) ? true : false);
}
 
bool operator<= (const MyString& t, const char *c)
{
    return ((t.get_length () <= strlen (c)) ? true : false);
}
 
bool operator<= (const MyString& t, const MyString& t1)
{
    return ((t.get_length () <= t1.get_length ()) ? true : false);
}
 
bool operator<= (const char *c, const MyString& t)
{
    return ((strlen (c) <= t.get_length ()) ? true : false);
}
 
bool operator> (const MyString& t, const char *c)
{
    return ((t.get_length () > strlen (c)) ? true : false);
}
 
bool operator> (const MyString& t, const MyString& t1)
{
    return ((t.get_length () > t1.get_length ()) ? true : false);
}
 
bool operator> (const char *c, const MyString& t)
{
    return ((strlen (c) > t.get_length ()) ? true : false);
}
 
bool operator>= (const MyString& t, const char *c)
{
    return ((t.get_length () >= strlen (c)) ? true : false);
}
 
bool operator>= (const MyString& t, const MyString& t1)
{
    return ((t.get_length () >= t1.get_length ()) ? true : false);
}
 
bool operator>= (const char *c, const MyString& t)
{
    return ((strlen (c) >= t.get_length ()) ? true : false);
}
 
MyString& MyString::operator+= (const MyString& t)
{
    length = strlen (str) + strlen (t.str) + 1;
    char *newStr = new char[length];
    strcpy (newStr, str);
    strcat (newStr, t.str);
    strcpy (str, newStr);
    str[length-1] = '\0';
    delete[] newStr;
 
    return *this;
}
 
char& MyString::operator[] (size_t i)
{
    return str[i];
}
 
const char& MyString::operator[] (size_t i) const
{
    return str[i];
}
 
char& MyString::at (size_t i)
{
    if (str != NULL && i >= 0 && i < length)
    {
        return str[i];
    }
    else
    {
        throw std::out_of_range ("wrong index");
    }
}
 
const char& MyString::at (size_t i) const
{
    if (str != NULL && i >= 0 && i < length)
    {
        return str[i];
    }
    else
    {
        throw std::out_of_range ("wrong index");
    }
}
 
void MyString::getline (std::istream& in)
{
    while (true)
    {
        char c = in.get ();
 
        if (c == '\n')
        {
            break;
        }
 
        if (length == 0)
        {
            length = 2;
        }
        else
        {
            ++length;
        }
 
        char* newStr = new char[length];
        if (str != NULL)
        {
            strcpy (newStr, str);
        }
        newStr[length-2] = c;
        newStr[length-1] = '\0';
 
        delete[] str;
 
        str = newStr;
    }
}
 
size_t MyString::get_length () const
{
    return (length - 1);
}
 
void MyString::from_c_str (const char *c)
{
    length = strlen (c) + 1;
    delete[] str;
    str = new char[length];
    strcpy (str, c);
}
 
const char* MyString::c_str () const
{
    return str;
}
 
std::ostream& operator<< (std::ostream& out, const MyString& t)
{
    out << t.str;
    return out;
}
 
std::istream& operator>> (std::istream& in, MyString& t)
{
    t.getline (in);
    return in;
}
Из того, что только что поменял, есть недочёты?
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
19.01.2012, 23:55     Использование собственного класса строк #46
френды... читайте опять прошлые посты
и зачем у вас в классе
C++
1
void getline (std::istream& in);
дальше не смотрел
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.01.2012, 23:55     Использование собственного класса строк #47
YourLastSong, зачем операторы отношения сделаны дружественными? Мы же мусолим этот вопрос уже несколько страниц!
Сами операторы отношения реализованы неверно, гуглим "лексикографический порядок".
Та же проблема с getline.
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
20.01.2012, 00:11  [ТС]     Использование собственного класса строк #48
Ну что, попробовал кое-что сделать:

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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
class MyString
{
    private:
        size_t length;
        char *str;
 
        void from_c_str (const char *other);
 
    public:
        MyString ();
        MyString (const char *c);
        MyString (const MyString& t);
        ~MyString ();
 
        MyString& operator= (const MyString& t);
        MyString& operator= (const char *c);
        MyString& operator+= (const MyString& t);
        char& operator[] (size_t i);
        const char& operator[] (size_t i) const;
 
        char& at (size_t i);
        const char& at (size_t i) const;
        void getline (std::istream& in);
        size_t get_length () const;
        const char* c_str () const;
 
        friend std::ostream& operator<< (std::ostream& out, const MyString& t);
        friend std::istream& operator>> (std::istream& in, MyString& t);
};
 
MyString::MyString ()
{
    length = 1;
    str = new char[length];
    *str = '\0';
}
 
MyString::MyString (const char *c)
{
    from_c_str (c);
}
 
MyString::MyString (const MyString& t)
{
    from_c_str (t.str);
}
 
MyString::~MyString ()
{
    delete[] str;
}
 
MyString& MyString::operator= (const MyString& t)
{
    if (this == &t)
    {
        return *this;
    }
    from_c_str (t.str);
 
    return *this;
}
 
MyString& MyString::operator= (const char *c)
{
    from_c_str (c);
 
    return *this;
}
 
MyString operator+ (const MyString& left, const MyString& right)
{
    return MyString(left) += right;
}
 
bool operator== (const MyString& t, const MyString& t1)
{
    return (strcmp(t.c_str(), t1.c_str()) == 0);
}
 
bool operator!= (const MyString& t, const MyString& t1)
{
    return !(operator== (t, t1));
}
 
bool operator< (const MyString& t, const MyString& t1)
{
    return ((strcmp (t.c_str (), t1.c_str ()) < 0) ? true : false);
}
 
bool operator<= (const MyString& t, const MyString& t1)
{
    return ((strcmp (t.c_str (), t1.c_str ()) <= 0) ? true : false);
}
 
bool operator> (const MyString& t, const MyString& t1)
{
    return ((strcmp (t.c_str (), t1.c_str ()) > 0) ? true : false);
}
 
bool operator>= (const MyString& t, const MyString& t1)
{
    return ((strcmp (t.c_str (), t1.c_str ()) >= 0) ? true : false);
}
 
MyString& MyString::operator+= (const MyString& t)
{
    length = strlen (str) + strlen (t.str) + 1;
    char *newStr = new char[length];
    strcpy (newStr, str);
    strcat (newStr, t.str);
    strcpy (str, newStr);
    str[length-1] = '\0';
    delete[] newStr;
 
    return *this;
}
 
char& MyString::operator[] (size_t i)
{
    return str[i];
}
 
const char& MyString::operator[] (size_t i) const
{
    return str[i];
}
 
char& MyString::at (size_t i)
{
    if (str != NULL && i >= 0 && i < length)
    {
        return str[i];
    }
    else
    {
        throw std::out_of_range ("wrong index");
    }
}
 
const char& MyString::at (size_t i) const
{
    if (str != NULL && i >= 0 && i < length)
    {
        return str[i];
    }
    else
    {
        throw std::out_of_range ("wrong index");
    }
}
 
void MyString::getline (std::istream& in)
{
    while (true)
    {
        char c = in.get ();
 
        if (c == '\n')
        {
            break;
        }
 
        if (length == 0)
        {
            length = 2;
        }
        else
        {
            ++length;
        }
 
        char* newStr = new char[length];
        if (str != NULL)
        {
            strcpy (newStr, str);
        }
        newStr[length-2] = c;
        newStr[length-1] = '\0';
 
        delete[] str;
 
        str = newStr;
    }
}
 
size_t MyString::get_length () const
{
    return (length - 1);
}
 
void MyString::from_c_str (const char *c)
{
    length = strlen (c) + 1;
    delete[] str;
    str = new char[length];
    strcpy (str, c);
}
 
const char* MyString::c_str () const
{
    return str;
}
 
std::ostream& operator<< (std::ostream& out, const MyString& t)
{
    out << t.str;
    return out;
}
 
std::istream& operator>> (std::istream& in, MyString& t)
{
    t.getline (in);
    return in;
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.01.2012, 00:13     Использование собственного класса строк #49
YourLastSong, пока вроде всё так, осталось сделать getline менее прожорливым.
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
20.01.2012, 00:17     Использование собственного класса строк #50
и разобраться с операторами и/о (френды)

Добавлено через 1 минуту
оператор ввода реализован так, что будет делать не то, что от такого оп-ра следует ждать
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.01.2012, 00:18     Использование собственного класса строк #51
YourLastSong, я бы сказал, с френдовостью операторов ввода/вывода.

Добавлено через 49 секунд
retmas, а, ну да... я в них даже не смотрел по сути, пропустил getline в operator>>...
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
20.01.2012, 00:20  [ТС]     Использование собственного класса строк #52
Спасибо.

При наличии выражения

C++
1
delete[] str;
в методе from_c_str () программа вылетает во время выполнения.

пока вроде всё так, осталось сделать getline менее прожорливым
Да, разумеется, мне бы сначала проверить, работает ли данный код именно так, как надо.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.01.2012, 00:22     Использование собственного класса строк #53
YourLastSong, покажите тестовый код, при котором программа вылетает. Так проще будет отловить, когда delete[] применяется к невалидной памяти.
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
20.01.2012, 00:26     Использование собственного класса строк #54
C++
1
2
3
4
5
6
7
8
9
10
11
12
MyString& MyString::operator+= (const MyString& t)
{
    length = strlen (str) + strlen (t.str) + 1;
    char *newStr = new char[length];
    strcpy (newStr, str);
    strcat (newStr, t.str);
    strcpy (str, newStr);
    str[length-1] = '\0';
    delete[] newStr;
 
    return *this;
}
вот здесь переполнение буфера
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
20.01.2012, 00:26  [ТС]     Использование собственного класса строк #55
Например, вот такой:

C++
1
2
3
4
5
6
7
8
9
int main ()
{
    MyString str;
    std::cin >> str;
    if (str == "str")
        std::cout << "aaaaa";
    getchar ();
    return 0;
}
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
20.01.2012, 00:28     Использование собственного класса строк #56
оператор += сделан криво. будут глюки, исключения, краши.
ф-ия at() сделана криво. не учитывается факт того, что length больше, чем длинна строки на еденицу.

в from_с_str крашится, потому что идет удаление по неинициализированному указателю. str указывает хз куда. в конструкторах нужно явно проинициализировать нулем.
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
20.01.2012, 00:33  [ТС]     Использование собственного класса строк #57
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
MyString& MyString::operator+= (const MyString& t)
{
    length = strlen (str) + strlen (t.str) + 1;
    char *newStr = new char[length];
    strcpy (newStr, str);
    strcat (newStr, t.str);
    delete[] str;
    str = new char[length];
    strcpy (str, newStr);
    str[length-1] = '\0';
    delete[] newStr;
 
    return *this;
}
Верно, да?
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
20.01.2012, 00:38     Использование собственного класса строк #58
вы начали писать этот класс в целях самообразования. а вот сейчас пишите почти что под диктовку, не думая. это не есть гуд.
последняя реализация оператора += все равно кривая, даже если корректно работает. зачем два раза выделять память, когда одного раза достаточно. зачем высчытывать еще раз размер строки, когда он известен.

ну и у всего класса одна большая проблема с тем, что он небезопасен в плане исключений.
YourLastSong
1 / 1 / 0
Регистрация: 12.12.2010
Сообщений: 112
20.01.2012, 17:07  [ТС]     Использование собственного класса строк #59
Решил убрать ключевое слово friend у перегруженных операторов <<, >>.

Для этого вместо явного вызова

C++
1
out << t.str;
решил использовать функцию c_str ()

C++
1
out << t.c_str ();
Почему в таком случае на экран выводится непонятно что?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2012, 17:38     Использование собственного класса строк
Еще ссылки по теме:

C++ Использование собственного функтора со связывателями
Создание списка объектов собственного класса (SQL) C++
C++ Std::vector добавить новый элемент собственного класса без использования конструктора копирования

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.01.2012, 17:38     Использование собственного класса строк #60
YourLastSong, вряд ли проблема в этом месте, ведь тело c_str() - return str;, т.е. фактически ничего не изменилось. Скорее всего, проблема в другом месте.
Yandex
Объявления
20.01.2012, 17:38     Использование собственного класса строк
Ответ Создать тему
Опции темы

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