• String类的各种构造函数


    编写类String 的构造函数、析构函数和赋值函数,已知类String 的原型为:
    class String
    {
    public:
    String(const char *str = NULL); // 普通构造函数
    String(const String &other); // 拷贝构造函数
    ~ String(void); // 析构函数
    String & operate =(const String &other); // 赋值函数
    private:
    char *m_data; // 用于保存字符串
    };

    // String的普通构造函数            
     String::String(const char *str)      // 6分
    {
     if(str==NULL)                         
     {
      m_data = new char[1];    // 若能加 NULL 判断则更好
      *m_data = ‘\0’;                     
     }                                       
     else
     {
      int length = strlen(str);          
      m_data = new char[length+1];  // 若能加 NULL 判断则更好     
      strcpy(m_data, str);               
     }
    } 


    // 拷贝构造函数 String::String(const String &other)
    { int length = strlen(other.m_data); m_data = new char[length+1]; // 若能加 NULL 判断则更好 strcpy(m_data, other.m_data); }


    // 赋值函数 String & String::operate =(const String &other)
    {   // (1) 检查自赋值
    if(this == &other) return *this;   // (2) 释放原有的内存资源
    delete [] m_data; // (3)分配新的内存资源,并复制内容
    int length = strlen(other.m_data); m_data = new char[length+1]; // 若能加 NULL 判断则更好 strcpy(m_data, other.m_data); // (4)返回本对象的引用
    return *this; }

      // String的析构函数
    String::~String(void)
    {
      delete [] m_data;                    
      // 由于m_data是内部数据类型,也可以写成 delete m_data;
    }

     c标准库中包含字符串库:string.h    含有strlen(),strcpy()函数等。

    c++中含有的c风格的字符串库:#include <cstring>

    c++中扩展的字符串库:#include <string>

  • 相关阅读:
    C++11 学习笔记 std::function和bind绑定器
    vue服务端渲染如何使用html模板
    vue服务端渲染的基本实现
    vscode实用6款插件
    $router.addRoutes()+vuex 动态添加路由
    Vue.extend()
    vue router滚动行为scrollBehavior
    vue路由精确匹配模式 exact
    redirect和alias的区别
    vue命名路由(name)的作用
  • 原文地址:https://www.cnblogs.com/renyuan/p/3114200.html
Copyright © 2020-2023  润新知