Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C++ by registered user 1128Erika ( 14 years ago )
#include <string.h>

class string {

        private:
                char* data; 
                int length;

    public:

        string() //создает пустую строку
        {
                length=0;
                data=new char[length+1];
                data[length]=0;
        }

        string(const char* str) //создает объект класса
        {
                length=0;
                while (str[length])
                        length++;
                data = new char[length +1];
                for (int i=0; i<length; i++)
                        data[i]=str[i];
                data[length]=0;

        }
        string(const string& str) //конструктор копирования
        {
                length=strlen(str);
                data=new char[length+1];
                for (int i=0; i<length; i++)
                        data[i] = str.data[i];
                data[length]=0;
        }
        ~string() //деструктор
        {
                if (data!=NULL)
                delete [] data;
        }

        //!!!!
        string& operator=(const string& str) //оператор присваивания
        { 
                if (&str;==this) return *this;

                if (data!=NULL)delete [] data;

                length = str.length; 
                data=new char[length+1];
    for (int i=0; i<length; i++)
                        data[i] = str.data[i];
                //strcpy(data, str.data);
                data[length]=0; 
                return *this; 
        } 


        operator char*() const // оператор приведения 
        {
                return data;
        }

        string & operator += ( string & another) // оператор += (присобачили)
        {
        char *newdata = new char[length + another.length + 1];
        //strcpy(newdata, data);
  for (int i=0; i<length; i++)
   newdata[i] = data[i];
        delete [] data; 
        //strcpy(newdata + length, another.data);
  for (int i=length; i<length+another.length; i++)
   newdata[i] = another.data[i-length];
  
        length += another.length; 
        data = newdata;
        return *this; }
 
        string operator + ( string & another) //оператор + (новый) 
        {
        string result = *this; 
        result += another;
        return result;
        }
        char operator[](const int i) const
        {
                if (i<length) 
                        return data[i];
                else
                        return 0;
        }

        char& operator[](const  int i)
        {
                if (i<length) 
                        return data[i];
                else
                        return data[length+1];

        }

};



#include "string.h"
#include <iostream>


int main ()
{
        string s1="abc";
        std::cout<<"s1=abc"<<"\n";

        string s2="def";
        std::cout<<"s2=def"<<"\n";

        string s3(s1);//string s3(s1) // copy 
        std::cout<<"verification (copy) (s3=s1) s3="<<s3<<"\n";

        string s4=s1+s2;
        std::cout<<"verification (s4=s1+s2) s4="<<s4<<"\n";

        s4+=s3;
        std::cout<<"verification (s4+=s3) s4="<<s4<<"\n";

        string s5;
        s5 = s3;
        std::cout<<"verification (assignment) (s5=s3) s5="<<s5<<"\n";

        const char *x=s4;
        std::cout<<"verification const x="<<x<<"\n";

        char p=s1[0];
        std::cout<<"verification p=s1[0]="<<p<<"\n";

        s1[0]='D';
        std::cout<<"verification changed s1="<<s1<<"\n";
  getchar();

        return 0;

        }

 

Revise this Paste

Children: 54433
Your Name: Code Language: