C++string类的实现

String类的实现:

#include <iostream>
#include <string.h>
using namespace std;

class String
{
public:
    String();
    String(const char *str);
    String(const String &other);
    String &operator=(const String &other);
    String &operator+=(const String &other);
    friend String operator+(const String &s1, const String &s2);
    friend ostream& operator<<(ostream &out, const String &s);

    ~String();
private:
    char *data;
};
//构造函数
String::String()
{
    data = new char[1];
    data = '\0';
}
//构造函数
String::String(const char *str)
{
    int length = strlen(str) + 1;
    data = new char[length];
    memset(data, 0, length);
    strcpy(data, str);
}
//拷贝构造函数
String::String(const String &other)
{
    int length = strlen(other.data) + 1;
    data = new char[length];
    memset(data, 0, length);
    strcpy(data, other.data);
}
//=运算符重载函数,返回对象的引用
String &String::operator=(const String &other)
{
    if(this == &other)
    {
        return *this;
    }
    int length = strlen(other.data) + 1;
    data = new char[length];
    memset(data, 0, length);
    strcpy(data, other.data);
    return *this;
}
//+=运算符重载函数,返回对象引用
String &String::operator+=(const String &other)
{
    int length = strlen(this->data) + strlen(other.data) + 1;
    char *str = new char[length];
    strcpy(str, this->data);
    strcat(str, other.data);

    delete[] data;
    data = new char[length];
    strcpy(data, str);
    return *this;
}
//+运算符重载函数,定义为友元函数,返回一个临时对象。
String operator+(const String &s1, const String &s2)
{
    String tmp;
    int length = strlen(s1.data) + strlen(s2.data) + 1;
    tmp.data = new char[length];
    strcpy(tmp.data, s1.data);
    strcat(tmp.data, s2.data);
    return tmp;
}
//析构函数
String::~String()
{
    delete[] data;
}
//输出函数
ostream &operator<<(ostream &out, const String &s)
{
    out<<s.data;
    return out;
}
int main()
{
    String a("hello");
    String b("world");
    String d = a + b;
    String c;
    a+=b;
    return 0;
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值