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

Тема в разделе "C/C++/C#", создана пользователем -, 12 дек 2009.

  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 *)
    {};
     
  2. villionk

    villionk Гость

    так это все есть в стандартном классе <string>
    там наверняка лучше сделано)))непонимаю зачем париться если оттуда можно взять все
     
  3. ChexoV

    ChexoV Гость

    (*.h) фаил
    Код (Text):
    #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)

    Код (Text):
    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;
    }
     
Загрузка...
Похожие Темы - Перегрузка операторов
  1. lisica198808
    Ответов:
    0
    Просмотров:
    942
  2. MGeorge
    Ответов:
    0
    Просмотров:
    1.345
  3. sasha465
    Ответов:
    1
    Просмотров:
    1.459
  4. XADD
    Ответов:
    1
    Просмотров:
    1.102
  5. XADD
    Ответов:
    9
    Просмотров:
    2.530

Поделиться этой страницей