powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перегрузка +
12 сообщений из 12, страница 1 из 1
Перегрузка +
    #33472219
Serg_com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Написал программку на перегрузку «+» для строковых переменных, все работает нормально, но хотелось бы больше. :) Пишу на 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”+ и т.д.;

может кто подскажет решение?
...
Рейтинг: 0 / 0
Перегрузка +
    #33472284
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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 ] ;
};
Вам следовало бы иметь
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class string
{
public:
string(char *);
string(string &); // конструктор копирования обязательно
string operator +(string &);
string operator -(string &);
string operator =(string &);
void show_string(void);
char * IOfS(void); // неясео что это
~string (); // деструктор не имеет параметров
private:
char *data; // выделяйте памяти столько, сколько надо
};
...
Рейтинг: 0 / 0
Перегрузка +
    #33472416
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть мысль.
Историю развития C/C++ можно рассматривать как борьбу
девелоперов с отсутствием строкового типа данных как такового.

Каждый адепт должен пройти обряд писания своего собственного
стринга (еще более глючного чем учебные примеры в книжках),
и опубликовав его, очередной раз убедится в том что кроме как
автору, сие твореник никому не нужно.

Итак вместо атомарного типа данных, создатели предложили
уродливую библиотечку string.h которая иммитирует работу
строк с помощью символьных массивчиков. А чего
стоило-то ввести тип данных. Неа. ПрЫцып - сделай сам.
...ь его за ногу! Из этого прЫнцыпа MS
лабает в CString -ах,
Bulder в TString . А мы - мотрим в сорцы и цокаем языками и
говорим... мдя ни ..уя оно не мигрируецца. Нада .. здеся
тип строки поменять. На какой? Как на какой? На МОЙ канешна!
На самый-луччий тип данных. Называецца vasyapupkin::string . Вот!



P.S. Не воспринимайте серьезно Так... мысль понесла.
...
Рейтинг: 0 / 0
Перегрузка +
    #33472484
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>mayton
Serg_com учится и правильно делает. Пусть учится и не надо применять к нему соображения, которые могут быть применены к профи. Есть некоторое минимальное количество шишек, которое каждый должен набить лично.
...
Рейтинг: 0 / 0
Перегрузка +
    #33473071
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во-первых, есть другая мысть, не поминать в контексте этого вопроса С и С++ вместе. В С со строками все в порядке (потому что требования низкие, т.е. никакие )

mayton
...ь его за ногу! Из этого прЫнцыпа MS лабает в CString -ах,
...
говорим... мдя ни ..уя оно не мигрируецца. Нада .. здеся


Нет, на самом деле это все ОЧЕНЬ серьезно. И не смешно.
Но CString на самом деле достаточно хорошо портируется.
Вместе с TCHAR.H.
...
Рейтинг: 0 / 0
Перегрузка +
    #33473074
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
muk07Вместо
Код: plaintext
1.
2.
3.
class string
{
...
};
Вам следовало бы иметь


Не, следовало бы иметь :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class string
{
public:
string(const char *);
string(); // конструктор по умолчанию.
// или вместо тех двух один string(const char * = NULL);
string(const string &); // конструктор копирования обязательно
string operator +(const string &);
string operator -(const string &);
string& operator =(const string &);
void show_string();
const char* IOfS(); // неясео что это, но char * в любом случае быть не должен.
~string();
private:
char *data; // выделяйте памяти столько, сколько надо
};

Это я только ошибки исправил.
Еще следовало бы иметь выделенный размер буфера и размер строки, возможно, счетчик ссылок. Ну да ладно, тестовый же пример.
...
Рейтинг: 0 / 0
Перегрузка +
    #33473329
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>MasterZiv
Обижаете. Ошибок у меня нет. Вы добавили уточнение const в параметрах.
Так я многого ещё не упомянул.
...
Рейтинг: 0 / 0
Перегрузка +
    #33473885
Serg_com
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, только сейчас удалось присесть за инет.
Спасибо Muk07 и MasterZiv за подсказки, завтра обязательно попробую, что вы предлагаете. Mayton, я смотрел CString, но достаточно с ним не разобрался, честно говоря библиотеки которую он требует у меня не оказалось. Во-вторых учиться надо всегда. В данном примере я пытаюсь понять как работает С++. Ведь не зная основ трудно двигаться дальше. Конечно все это будет доведено до ума. А вообще ребята спасибо всем, не думал так быстро получить ответ.
...
Рейтинг: 0 / 0
Перегрузка +
    #33474008
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonНеа. ПрЫцып - сделай сам.
...ь его за ногу! Из этого прЫнцыпа MS лабает в CString -ах,
Bulder в TString . А мы - мотрим в сорцы и цокаем языками и
говорим... мдя ни ..уя оно не мигрируецца. Нада .. здеся
тип строки поменять. На какой? Как на какой? На МОЙ канешна!
На самый-луччий тип данных. Называецца vasyapupkin::string . Вот!
Гы. Даже Герб Саттер рекоммендует делать свои строчки - типа std::string не удовлеворяет принципу необходимости и достаточности. Саффсем охренел (м)чудак.
...
Рейтинг: 0 / 0
Перегрузка +
    #33474017
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS: Делаешь свой стринг - скоро в метан превратишься, шутник.
http://antigreen.org/bioreactor/
...
Рейтинг: 0 / 0
Перегрузка +
    #33483183
waster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот как это было у меня:

// Конкатенация:

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;
}
...
Рейтинг: 0 / 0
Перегрузка +
    #33483447
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MS/Borland это очень плохие примеры существующие до сих пор главным образом из-за необходимости сопровождения написаного кода... Кода который был написан до появления STL(std::string). Нафига их использовать сейчас мне не ясно.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перегрузка +
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]