String类的部分实现

#include <iostream.h>

#include <assert.h>

#include <ostream.h>

#include <string.h>

 

class MyString

{

public:

    MyString(const char *str = NULL); //默认构造函数

    virtual ~MyString(void);    //析构函数

    MyString(const MyString &other); //拷贝构造函数

    MyString & operator =(const MyString &other); //赋值运算符

    friend MyString operator +(const MyString &oneString, const MyString &twoString); //两对象连接

    MyString operator +(const char *str); //对象与字符串连接

    friend MyString operator +(const char *str, const MyString &cString); //字符串与对象连接

    friend ostream & operator <<(ostream &output, const MyString &cString); //重载流插入运算符

private:

    char *m_data; //数据成员,存储字符串首地址

};

 

int main()

{

    cout<<"测试结果:"<<endl;

    MyString oneStr;

    cout<<"oneStr:"<<oneStr<<endl;

    MyString twoStr("world");

    cout<<"twoStr:"<<twoStr<<endl;

    MyString threeStr;

    threeStr = twoStr;

    cout<<"threeStr:"<<threeStr<<endl;

    MyString fourStr;

    fourStr = twoStr + threeStr;

    cout<<"fourStr:"<<fourStr<<endl;

    MyString fiveStr;

    fiveStr = twoStr + " !";

    cout<<"fiveStr:"<<fiveStr<<endl;

    MyString sixStr;

    sixStr = "Hello " + twoStr;

    cout<<"sixStr:"<<sixStr<<endl;

  

    return 0;

}

 

//构造函数

MyString::MyString(const char *str)

{

    if (NULL==str)

    {

        m_data = new char[1];

        m_data[0] = '/0';

    }

    else

    {

        int length = (int)strlen(str);

        m_data = new char[length+1];

        strcpy(m_data, str);

    }

}

 

//析构函数

MyString::~MyString(void)

{

    delete []m_data;

}

 

//拷贝构造函数

MyString::MyString(const MyString &other)

{

    assert(NULL != other.m_data);

    m_data = new char[strlen(other.m_data) + 1];

    strcpy(m_data, other.m_data);

}

 

//赋值运算符(=)重载

MyString & MyString::operator =(const MyString &other)

{

    assert(NULL != other.m_data);

    if (this == &other)

        return *this;

    delete []m_data;

    m_data = new char[strlen(other.m_data) + 1];

    strcpy(m_data, other.m_data);

    return *this;

}

 

//加号运算符(+)重载,连接两个MyString对象

MyString operator +(const MyString &oneString, const MyString &twoString)

{

    assert(NULL != oneString.m_data);

    assert(NULL != twoString.m_data);

    MyString catString;

    catString.m_data = new char[strlen(oneString.m_data) + strlen(twoString.m_data) + 1];

    strcpy(catString.m_data, oneString.m_data);

    strcat(catString.m_data, twoString.m_data);

    return catString;

}

 

//加号运算符(+)重载,连接一个MyString对象和一字符串

MyString MyString::operator +(const char *str)

{

    if (NULL==str)

    {

        return *this;

    }

    MyString catString;

    catString.m_data = new char[strlen(m_data) + strlen(str) + 1];

    strcpy(catString.m_data, m_data);

    strcat(catString.m_data, str);

    return catString;

}

 

//加号运算符(+)重载,连接一字符串和一个MyString对象

MyString operator +(const char *str, const MyString &cString)

{

    if (NULL==str)

    {

        return cString;

    }

    MyString catString;

    catString.m_data = new char[strlen(cString.m_data) + strlen(str) + 1];

    strcpy(catString.m_data, str);

    strcat(catString.m_data, cString.m_data);

    return catString;

 

}

 

//重载流插入运算符

ostream & operator <<(ostream &output, const MyString &cString)

{

    output<<cString.m_data;

    return output;

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值