利用类中的特殊成员函数模仿string类编写自己的My_string类

实现代码

#include <iostream>
#include <cstring>

using namespace std;

class My_string
{
private:
    char *cstr;
    int len;
public:
    //无参函数
    My_string():cstr(NULL),len(0)
    {

    }

    //有参函数
    My_string(const char* str)/*:cstr((char*)str),len(strlen(str))*/
    {
        len = strlen(str);
        cstr = new char[len+1] ();
        strcpy(cstr, str);
    }

    //拷贝构造
    My_string(const My_string &other)
    {
        len = other.len;
        cstr = new char[len+1]();
        strcpy(cstr, other.cstr);
    }

    //析构函数
    ~My_string()
    {
        delete []cstr;
        cstr = NULL;
        cout<<"析构函数"<<this<<endl;           //打印this对应的类对象地址,检验类对象是否都正常结束
    }

    //判断是否为空
    bool empty()
    {
        return len==0?1:0;
    }

    //返回字符串的长度
    int size()
    {
        return len;
    }

    //定位函数
    char &at(int index)
    {
        return cstr[index];
    }

    //转化为C风格字符串
    char* c_str()
    {
        return cstr;
    }
};

int main()
{
    My_string s1("hello");      //调用有参构造函数,将字符串赋值给s1
    My_string s2 = s1;          //调用拷贝构造函数,将s1作为参数传给s2
    My_string s3(s1);           //调用拷贝构造函数,将s1作为参数传给s3
    My_string s4;               //系统自动调用无参构造,此时s4的len=0,cstr=NULL

    //打印各个类的地址
    cout<<"&s1 = "<<&s1<<"   &s2 = "<<&s2<<"   &s3s = "<<&s3<<"   &s4 = "<<&s4<<endl;

    //分别打印s1,s2,s3的字符串
    cout<<"s1 = "<<s1.c_str()<<endl;
    cout<<"s2 = "<<s2.c_str()<<endl;
    cout<<"s3 = "<<s3.c_str()<<endl;

    //调用定位函数、获取字符串长度以及判断s3是否为空
    cout<<"s3[4] = "<<s3.at(4)<<"   s3.size = "<<s3.size()<<"   s3.empty = "<<s3.empty()<<endl;

    //判断s4是否为空
    cout<<"s4.empty = "<<s4.empty()<<endl;

    //打印输出看,是否真的转为C风格字符串
    char* str = s3.c_str();
    cout<<"char* str = "<<str<<endl;
    return 0;
}

测试结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值