Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2011, 21:23   #1
nhr
Пользователь
 
Регистрация: 11.12.2010
Сообщений: 25
По умолчанию перегрузка оператора ++

вопрос вот в чем: когда он выводит на экран, при выполнении оператора ++, он начинает выдавать нечто странное, вот код!
Помогите заставить ее работать!



#include<iostream>
#include<conio.h>
#include<string.h>
#include<stdio.h>
using namespace std;

class mystr
{
public:
int len;
char*str;
char*r;
char*nstr;
mystr();
mystr(char*p="NULL");
mystr(const mystr&M="NULL");
~mystr();
const mystr&operator =(const mystr &M){
if(&M==this)return *this;
if(str) delete[]str;

if(M.str){
str=new char[strlen(M.str)+1];
strcpy(str,M.str);}
else str=0;
return *this;}

char* operator +(char*set);
mystr operator ++();
char& operator[](int i);
void show(void);
};



mystr::mystr(char *p){
len=strlen(p);
str=new char[len+1];
strcpy(str,p);
}

mystr::mystr(const mystr &M){

len=M.len;
str=new char[len+1];
strcpy(str,M.str);
}

mystr::~mystr(){
delete[]str;
}

//индексирование
char& mystr:: operator[](int i)
{if (i<strlen(str))
return str[i];
}

//объединение
char* mystr:: operator+(char*set){
char *r=new char[strlen(str)+strlen(set)+1];
strcpy(r,str);
strcat(r,set);
return r;
}

//префиксное увеличение строки ++
mystr mystr:: operator ++(){
char *r;
if(nstr){
r=new char[strlen(nstr)+1];
strcpy(r,nstr);
delete[] nstr;
}
else
{
r=new char[strlen(str)+1];
strcpy(r,str);
}
r=new char[strlen(r)+strlen(str)+1];

if(nstr)
{
sprintf(nstr,"%s%s",r,str);
}
return nstr;
}


void mystr::show(void){
cout<<str<<endl;
}

int main(){
setlocale(LC_ALL,".1251");
mystr M="opel";
M.show();

char *B=new char[8];
strcpy(B,"_rullez");
cout<<"объединение строк:\n";
puts(M+B);

M++;
cout<<"префиксное увеличение строки:\n";
M.show();

getch();
return 0;
}
nhr вне форума Ответить с цитированием
Старый 04.05.2011, 23:32   #2
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Описал префиксное, а используешь постфиксное...
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Перегрузка оператора += и >> Jane-sad Помощь студентам 4 01.03.2013 15:38
Перегрузка оператора + Jane-sad Помощь студентам 0 05.10.2010 13:52
перегрузка оператора -> alex_alpha Общие вопросы C/C++ 5 23.06.2010 19:07
Перегрузка оператора + z3rg Общие вопросы C/C++ 1 22.03.2009 03:06
Перегрузка оператора + (С++) MjRed Помощь студентам 1 15.12.2008 18:57