C++—String类

在C++中常见的一个面试题就是实现一个String类,在面试中我们需要实现的是String类基本的管理资源,能够拥有以下的功能:
1.能够定义变量,不能够赋值和复制等。
2.能够作为函数的参数和返回类型。
3.可以作为STL中容器的数据类型。

其次我们需要知道,string类的基本成员函数,如构造函数,拷贝构造函数,赋值操作符的重载,析构函数等。我们需要对这些函数实现String类的功能。

在实现String类,需要注意:
1.C++的String类中,可以定义一个空的字符串,该字符串只存在“\0”作为字符串结束的标志。
2.String类的拷贝构造和赋值运算符的重载时,我们需要注意的是不能只表面的进行值拷贝,也就是浅拷贝,两个类对象同时指向同一块空间,在释放的时候会对同一块空间释放多次,因此程序崩溃。

#include<iostream>

class String
{
public:

    String(const char* ptr ="")
        :_ptr(new char[strlen(ptr)+1])
    {
        strcpy(_ptr,ptr);
    }

    String(const String& str)
        :_ptr(new char[strlen(str._ptr)+1])
    {
        strcpy(_ptr, str._ptr);
    }

    //传统写法
    //String& operator=(const String& str)
    //{
    //  if (&str != this)
    //  {
    //      delete[] _ptr;
    //      _ptr = new char[strlen(str._ptr) + 1];
    //      strcpy(_ptr, str._ptr);
    //      return *this;
    //  }
    //  return *this;
    //}

    //现代写法
    String& operator=(String str)
    {
        std::swap(_ptr, str._ptr);
        return *this;
    }

    ~String()
    {
        if (_ptr != NULL)
        {
            delete[] _ptr;
            _ptr = NULL;
        }
    }

    size_t size()const
    {
        return strlen(_ptr);
    }

    const char* str()const
    {
        return _ptr;
    }

private:
    char* _ptr;
};

还需要注意的是,在面试中,传统写法和现代写法不要搞混,只能按照一种格式写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值