侯捷《C++面向对象开发》--String类的实现

#ifndef __STRING__
#define __STRING__

#include<ostream>
class String
{
public:
    String(const char* cstr = 0);                   //构造函数
    String(const String& str);                      //拷贝构造
    String& operator = (const String& str);         //拷贝复制
    ~String();                                      //析构函数
    char* get_c_str() const { return m_data; }
private:
    char* m_data;
};

inline String::String(const char* cstr)               //这里不能重新定义默认参数,如果需要参数的其他值,则应将默认参数留空。
{
    if (cstr)                                         //检查cstr是否为空指针
    {
        m_data = new char[std::strlen(cstr) + 1];
        strcpy_s(m_data, (std::strlen(cstr)+1),cstr);
    }
    else
    {
        m_data = new char[1];
        *m_data = '