Перегрузка операторов

  • Автор темы -
  • Дата начала

Гость
#1
Реализовать класс String для работы со строками символов. Память под строку выделять динамически. Перегрузить операторы ==,>,<,!= и операции ввода-вывода в поток.В функции main привести примеры реализации указанных операций.

Вот что я родила и запуталась...Помогите, пожалуйста...

C++:
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>


class string
{
public:
string(char *);
string ();
string (string *);
int operator ==(string str);
int operator >(string str);
int operator <(string str);
int operator !=(string str);
// ostream &operator << (ostream &stream);
char *stroka;
};

int string :: operator==(string str)
{
int i;
for (i=0;stroka[i]==str.stroka[i];i++)
if (stroka[i]==NULL && str.stroka[i]==NULL) return (1);//ravni
return (0);
};

int string :: operator!=(string str)
{
int i;
for (i=0;stroka[i]==str.stroka[i];i++)
if ((stroka[i])==NULL&&(str.stroka[i]!=NULL)
||(stroka[i]!=NULL&&str.stroka[i]==NULL))
{
cout<<"234";
return (1);//neravni
};
return (0);
};

int string:: operator > (string str)
{
int i;
for (i=0;stroka[i]==str.stroka[i];i++)
if (stroka[i]==NULL&&str.stroka[i]==NULL) return (0);//ravni;
if (stroka[i]>str.stroka[i]) return (1);//bolshe
return (-1);//menshe
};


int string:: operator < (string str)
{
int i;
for (i=0;stroka[i]==str.stroka[i];i++)
if (stroka[i]==NULL&&str.stroka[i]==NULL) return (0);//ravni;
if (stroka[i]<str.stroka[i]) return (1);//menshe
return (-1);//bolshe
};

void main()
{
clrscr();
int i;
string *p[2];
p[1]->stroka[256]=(char)malloc(256);
strcpy(p[1]->stroka,"tdlkfjlsk;djflksjdfl;ksdjglkdjfgkl;jdfl;gjdf");
p[2]->stroka[256]=(char)malloc(256);
strcpy(p[2]->stroka,"sdlkfjlsk;djflksjdfl;ksdjglkdjfgkl;jdfl;gjdf");
p[1] != p[2];
getch();
};

ostream &operator << (ostream &stream,string str)
{
int i,j;
j=0;
while (str.stroka[j]!=NULL)
{
if (j%10==0)
{
stream <<"-"<<endl;
}
stream <<str.stroka[j];
j++;
};
return stream;
};

ostream &operator >> (ostream &stream,string str)
{
char c;
int i;
i=0;
while (cin>>c)
{
str.stroka[i]>>c;
stream>>str.stroka;
i++;
}
return stream;
/*char s[256];
stream.getline(s,256);
strcpy(str.stroka,s);
return stream; */
};

string :: string (char *str)
{
strcpy (stroka,str);
};
string :: string ()
{};
string::string (string *)
{};
 
V

villionk

Гость
#2
так это все есть в стандартном классе <string>
там наверняка лучше сделано)))непонимаю зачем париться если оттуда можно взять все
 
C

ChexoV

Гость
#3
(*.h) фаил
Код:
#include <string>
#include <ostream>


class String
{
public:
String(int N=80);
String(char *);
String(String & string);
~String(void);
void PrintString();
int length();
String & operator=(const String & string);
bool operator!=(const String & string)const;
bool operator==(const String & string)const;
bool operator<(const String & string)const;
bool operator<=(const String & string)const;
bool operator>(const String & string)const;
bool operator>=(const String & string)const;
private:
char *str;
int len;
}
(*.cpp)

Код:
String::String(int N)
{
this->len=N;
this->str=new char[N+1];
this->str[0]='\0';
}
String::String(String &string)
{
this->len=string.length();
this->str=new char[this->len+1];
strcpy(this->str,string.str);
}
String::~String(void)
{
delete [] this->str;
}

String::String(char *Str)
{
this->len=strlen(Str);
this->str=new char[strlen(Str)+1];
strcpy(this->str,Str);
}
void String::PrintString()
{
puts(this->str);
}
int String::length()
{
return strlen(this->str);
}
String & String::operator=(const String & string)
{
strcpy(this->str,string.str);
return *this;
}
bool String::operator!=(const String & string)const
{
if(strcmp(this->str,string.str)==0)
return false;
return true;
}
bool String::operator==(const String & string)const
{
if(strcmp(this->str,string.str)==0)
return true;
return false;
}
bool String::operator<(const String & string)const
{
if(strcmp(this->str,string.str)==-1)
return true;
return false;
}
bool String::operator<=(const String & string)const
{
if(strcmp(this->str,string.str)==-1 || *this==string)
return true;
return false;
}
bool String::operator>(const String & string)const
{
if(strcmp(this->str,string.str)==1)
return true;
return false;
}
bool String::operator>=(const String & string)const
{
if(strcmp(this->str,string.str)==1 && *this==string)
return true;
return false;
}