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

本文介绍了一个自定义String类的设计与实现,包括构造函数、赋值运算符重载、拼接操作、长度获取及索引访问等功能。通过具体示例展示了如何使用该类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                             一个完整的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;
}
//--------------------------------------------------------------------------- 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值