9-2 C++ string改写

#include <iostream>
#include <cstring>
#include <cstdio>

class MYstring
{
    public:

        //无参构造函数
        MYstring()
        {
            std::cout << "无参构造函数" << std::endl;
            ptr = nullptr ;
            len = 0;
        }

        //有参构造函数
        MYstring(const char *s)
        {

            std::cout << "有参构造函数" << std::endl;
            len = strlen(s);
            ptr = (new char[len]);
            strcpy(ptr,s);
        }

        //析构函数
        ~MYstring()
        {

            std::cout << "析构造函数" << std::endl;
            if(nullptr != ptr)
            {
                delete []ptr;
            }

        }

        //拷贝构造函数
        MYstring(const MYstring &str):len(str.len),ptr(new char[len])
        {
            std::cout << "拷贝构造函数" << std::endl;
            strcpy(ptr,str.ptr);
        }

        //拷贝赋值函数
        MYstring& operator=(const MYstring &N)
        {
            if(nullptr != this)
            {
                len = N.len;
                if(nullptr != ptr)
                {
                    ptr = new char[len];
                }
                strcpy(ptr,N.ptr);
            }
            std::cout << "拷贝赋值函数" << std::endl;
            return *this;
        }

        //data
        const char *data()
        {

            return ptr;
        }

        //size
        size_t size()
        {
            return len;
        }

        //empty
        bool empty()
        {
            if(len == 0)
            {
                return true;
            }else
            {
                return false;
            }
        }

        //at
        char at(size_t index)
        {
            char ch = *(ptr+index-1);
            if(0>index || index >(len-1))
            {
                std::cout << "out_of_range" << std::endl;
            }else
            {
                return ch;
            }
        }
    private:
         char *ptr;
         int len;


};
int main(int argc, const char *argv[])
{                                                                                                                                              
    MYstring T1("asdf");

    std::cout << T1.data() << std::endl;//data()函数返回指向自己的第一个字符的指针

    std::cout << T1.size() << std::endl;//size()函数返回字符串中现在拥有的字符数

    std::cout << std::boolalpha << T1.empty() << std::endl;//如果字符串为空则empty()返回真(true),否则返回假(false)

    std::cout << T1.at(3) << std::endl;//at(J)函数返回一个引用,指向在index位置的字符.
                                                           //如果index不在字符串范围内, at()将报告"out of range"错误,
                                                           //并抛出out_of_range异常


    return 0;
}
                                                                                                                                               
                                                                                                                                               
                                                                                                                                               

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值