|
|
|
Перегрузка +
|
|||
|---|---|---|---|
|
#18+
Написал программку на перегрузку «+» для строковых переменных, все работает нормально, но хотелось бы больше. :) Пишу на VC++ 6.0 ******************************* // Operator.cpp : Defines the entry point for the console application. // #include <stdafx.h> #include <iostream.h> #include <string.h> #include <string_class.h> void main(void) { string t(""); // инициализация string l(""); t = "C++"; l = "Перегрузка операторов"; t.show_string(); // печать t = t + " складываем"; t.show_string() ; l.show_string(); l = l - 'в'; l.show_string(); } ******************************* /*string_class.h*/ #include <iostream.h> class string { public: string(char *); char * operator +(char *); char * operator -(char); char * operator =(char *); void show_string(void); char * IOfS(void); ~string (void); private: char data[256] ; }; string::string(char *str) {strcpy(data, str);} char * string::operator +(char *str) { return(strcat(data, str));} char * string::operator -(char letter) { char temp[256]; int i, j; for (i = 0, j = 0; data ; i++) if (data != letter) temp[j++] = data; temp[j] = NULL; return(strcpy(data, temp));} char * string::operator =(char *str) {return(strcpy(data, str));} void string::show_string(void) {cout << data << endl;} char * string::IOfS(void) {return data;} string::~string(void) {} ******************************* хочу чтоб можно было складывать строки типа: title = title + “aaa” + “bbb”+ и т.д.; может кто подскажет решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 02:24 |
|
||
|
Перегрузка +
|
|||
|---|---|---|---|
|
#18+
Вместо Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 07:28 |
|
||
|
Перегрузка +
|
|||
|---|---|---|---|
|
#18+
Есть мысль. Историю развития C/C++ можно рассматривать как борьбу девелоперов с отсутствием строкового типа данных как такового. Каждый адепт должен пройти обряд писания своего собственного стринга (еще более глючного чем учебные примеры в книжках), и опубликовав его, очередной раз убедится в том что кроме как автору, сие твореник никому не нужно. Итак вместо атомарного типа данных, создатели предложили уродливую библиотечку string.h которая иммитирует работу строк с помощью символьных массивчиков. А чего стоило-то ввести тип данных. Неа. ПрЫцып - сделай сам. ...ь его за ногу! Из этого прЫнцыпа MS лабает в CString -ах, Bulder в TString . А мы - мотрим в сорцы и цокаем языками и говорим... мдя ни ..уя оно не мигрируецца. Нада .. здеся тип строки поменять. На какой? Как на какой? На МОЙ канешна! На самый-луччий тип данных. Называецца vasyapupkin::string . Вот! P.S. Не воспринимайте серьезно Так... мысль понесла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 11:15 |
|
||
|
Перегрузка +
|
|||
|---|---|---|---|
|
#18+
>mayton Serg_com учится и правильно делает. Пусть учится и не надо применять к нему соображения, которые могут быть применены к профи. Есть некоторое минимальное количество шишек, которое каждый должен набить лично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 12:23 |
|
||
|
Перегрузка +
|
|||
|---|---|---|---|
|
#18+
Во-первых, есть другая мысть, не поминать в контексте этого вопроса С и С++ вместе. В С со строками все в порядке (потому что требования низкие, т.е. никакие ) mayton ...ь его за ногу! Из этого прЫнцыпа MS лабает в CString -ах, ... говорим... мдя ни ..уя оно не мигрируецца. Нада .. здеся Нет, на самом деле это все ОЧЕНЬ серьезно. И не смешно. Но CString на самом деле достаточно хорошо портируется. Вместе с TCHAR.H. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 22:29 |
|
||
|
Перегрузка +
|
|||
|---|---|---|---|
|
#18+
muk07Вместо Код: plaintext 1. 2. 3. Не, следовало бы иметь : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Еще следовало бы иметь выделенный размер буфера и размер строки, возможно, счетчик ссылок. Ну да ладно, тестовый же пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2006, 22:37 |
|
||
|
Перегрузка +
|
|||
|---|---|---|---|
|
#18+
>MasterZiv Обижаете. Ошибок у меня нет. Вы добавили уточнение const в параметрах. Так я многого ещё не упомянул. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 08:56 |
|
||
|
Перегрузка +
|
|||
|---|---|---|---|
|
#18+
Добрый день, только сейчас удалось присесть за инет. Спасибо Muk07 и MasterZiv за подсказки, завтра обязательно попробую, что вы предлагаете. Mayton, я смотрел CString, но достаточно с ним не разобрался, честно говоря библиотеки которую он требует у меня не оказалось. Во-вторых учиться надо всегда. В данном примере я пытаюсь понять как работает С++. Ведь не зная основ трудно двигаться дальше. Конечно все это будет доведено до ума. А вообще ребята спасибо всем, не думал так быстро получить ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 12:29 |
|
||
|
Перегрузка +
|
|||
|---|---|---|---|
|
#18+
maytonНеа. ПрЫцып - сделай сам. ...ь его за ногу! Из этого прЫнцыпа MS лабает в CString -ах, Bulder в TString . А мы - мотрим в сорцы и цокаем языками и говорим... мдя ни ..уя оно не мигрируецца. Нада .. здеся тип строки поменять. На какой? Как на какой? На МОЙ канешна! На самый-луччий тип данных. Называецца vasyapupkin::string . Вот! Гы. Даже Герб Саттер рекоммендует делать свои строчки - типа std::string не удовлеворяет принципу необходимости и достаточности. Саффсем охренел (м)чудак. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 13:03 |
|
||
|
Перегрузка +
|
|||
|---|---|---|---|
|
#18+
PS: Делаешь свой стринг - скоро в метан превратишься, шутник. http://antigreen.org/bioreactor/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 13:04 |
|
||
|
Перегрузка +
|
|||
|---|---|---|---|
|
#18+
Вот как это было у меня: // Конкатенация: const string& operator+=( const char* ); friend const string operator+( const string&, const char* ); где-то вычитал, что (пишу для новичков): а) строки перегружаются симметричным дружественным оператором б) возвращаемое значение - ессно тип, т.к. нужна временная переменная. по ходу три неимоверно полезные (для своего класса string) функции: unsigned char my_strlen( const char *s ) { const char *p = s; while( *p ) p++; return( p - s ); } char *my_strcpy( char *s1, const char *s2 ) { char *p1 = s1; const char *p2 = s2; while( *p1++ = *p2++ ); return s1; } bool my_strcmp( const char *s1, const char *s2 ) { const char *p1 = s1; const char *p2 = s2; while(( *p1==*p2 )&&( *p1++ )&&( *p2++ )); --p1; --p2; if (( p1 != &s1[ my_strlen( s1 )] ) && ( p2 != &s2[ my_strlen( s2 )] )) return true; return false; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 01:11 |
|
||
|
Перегрузка +
|
|||
|---|---|---|---|
|
#18+
MS/Borland это очень плохие примеры существующие до сих пор главным образом из-за необходимости сопровождения написаного кода... Кода который был написан до появления STL(std::string). Нафига их использовать сейчас мне не ясно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2006, 14:14 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33473071&tid=2032137]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
136ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 219ms |
| total: | 425ms |

| 0 / 0 |
