C++ 参考string类完成my_string类

覆盖类中原有的的构造函数和新增功能函数:

#include <iostream>

using namespace std;

class my_string
{
    private:
        char *str;
        int len;

    public:
        //无参构造
        my_string(){
            len = 15;
            str = new char[len];
            cout<<"无参构造"<<endl;
        }
        //有参构造
        my_string(char *p)
        {
            char *tra = p;
            int count = 0;
            while(*tra != '\0')
            {
                tra++;
                count++;
            }
            len = count;

            str = new char[count+1]; // 字符串以'\0'结尾
            for(int i=0; i<count+1; i++)
            {
                *(str+i) = *(p+i);
            }
            cout<<"有参构造"<<endl;
        }
        //拷贝构造
        my_string(const my_string &other)
        {
            str = new char[len]; //已经构造过,不需要再初始化len
            for(int i=0; i<len+1; i++)
            {
               *(this->str+i) = *(other.str+i);
            }
            cout<<"拷贝构造"<<endl;
        }
        //拷贝赋值
        my_string &operator=(const my_string &other)
        {
            this->len = other.len;
            this->str = new char[len];
            for(int i=0; i<this->len+1; i++)
            {
                *(this->str+i) = *(other.str+i);
            }
            cout<<"赋值拷贝构造"<<endl;
            return *this;
        }
        //析构函数
        ~my_string()
        {
            delete str;
            str = NULL;
            cout<<"析构函数"<<endl;
        }

        //判空
        bool empty()
        {
            return len == 0?1:0;
        }
        //求总长度
        int size()
        {
            return len;
        }
        //at()
        char &at(int pos)
        {
            return *(str+pos);
        }
        //转c风格字符串函数
        char *c_str()
        {
            return str;
        };
};

int main()
{
    my_string s1; // 无参构造
    my_string s2("aaa bbb!"); // 有参构造
    my_string s3(s2); // 拷贝构造
    my_string s4;
    s4 = s2; // 赋值拷贝构造
    cout<<"size:"<<s2.size()<<endl;
    cout<<"at:"<<s2.at(4)<<endl;
    cout<<"empty:"<<s2.empty()<<endl;
    cout<<s2.c_str()<<endl;

    cout << "Hello World!" << endl;
    return 0;
}

测试结果:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值