一个完整的String类定义以及测试

来源:互联网 发布:方舟生存进化设置优化 编辑:程序博客网 时间:2024/05/12 20:16

                                             一个完整的String类定义以及测试

//---------------------------------------------------------------------------
#include <iostream>
#include "stdio.h"
#include "malloc.h"
#include "string.h"
#include <assert.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
using namespace std;

class String
{
public:
        String(char* ptr=NULL)
        {
                if(ptr==NULL)
                {
                        ptr=new char[1];
                        ptr[0]='/0';
                }
                else
                {
                        assert(m_data!=NULL);
                        int length=strlen(ptr);
                        m_data=new char[length+1];//使用指针前一定要分配空间。
                        strcpy(m_data,ptr);
                }
        }
        String(const String& other)
        {
                int length=strlen(other.m_data);
                m_data=new char[length+1];
                assert(m_data!=NULL);
                strcpy(m_data,other.m_data);
        }
        String& operator=(String& other)
        {
                if(this==&other)
                return *this;
                delete []m_data;
                int length=strlen(other.m_data);
                m_data=new char[length+1];
                assert(m_data!=NULL);
                strcpy(m_data,other.m_data);
        }
        ~String()
        {
                delete []m_data;
        }
        const char& operator[](int index)
        {
                int i=0;
                while(i++<index);
                return *(m_data+i);
        }
        String& operator+(String& str2)
        {
                int len1=strlen(this->m_data);
                int len2=strlen(str2.m_data);
                char* str=new char[len1+len2+1];
                strcpy(str,this->m_data);
                char* temp=str+len1;
                while((*temp++=*str2.m_data++)!='/0')
                this->m_data=str;
                return *this;
        }
        int length()
        {
                return strlen(m_data);
        }
friend ostream& operator<<(ostream& os,String& data)
{
        os<<data.m_data;
        return os;
}
private:
        char* m_data;
};
int main(int argc, char* argv[])
{
        String str1("Hello,");
        String str2("World!");
        str1=str1+str2;
        cout<<str1<<endl;
        cout<<str1.length()<<endl;

        String str3("hello ,world!");
        cout<<str3[8]<<endl;

        system("pause");
        return 0;
}
//--------------------------------------------------------------------------- 

原创粉丝点击