zoukankan      html  css  js  c++  java
  • String类的实现

    1、在类中可以访问private成员包括两层含义:可以访问this指针的private成员;可以访问同类对象的private成员。

    2、这里的String可以认为是个资源管理类,内部有个char指针,在堆上分配对象,而且对于String应该是深复制,不是复制指针,而是要复制指针指向的内容。

    String类的定义(头文件):

     1 #ifndef String_H_
     2 #define String_H_
     3 class String
     4 {
     5 public:
     6  String(const char* src);
     7  String(const String& rhs);
     8  String& operator=(const String& rhs);
     9  ~String();
    10 private:
    11  char* _data;
    12 };
    13 #endif

    String类的实现(cpp文件):

     1 #include "String.h"
     2 #include <iostream>
     3 String::String(const char* src)
     4 {
     5  if(src==NULL)
     6  {
     7   _data = new char[1];
     8   _data[0]='';
     9  }
    10  else
    11  {
    12   _data = new char[strlen(src)+1];
    13   strcpy(_data,src);
    14  }
    15 }
    16 
    17 String::String(const String& rhs)
    18 {
    19  _data = new char[strlen(rhs._data)+1];
    20  strcpy(_data,rhs._data);
    21 }
    22 
    23 String& String::operator=(const String& rhs)
    24 {
    25  if(this == &rhs)
    26  {
    27   return *this;
    28  }
    29  delete[]_data;
    30  _data = new char[strlen(rhs._data)+1];
    31  strcpy(_data,rhs._data);
    32  return *this;
    33 }
    34 
    35 String::~String()
    36 {
    37  delete []_data;
    38 }

    上面的String实现,使用了new char在堆上分配内存,当然也可以使用malloc,需要注意的是,这种情况下,要使用free释放内存。而且,要注意的是,new和delete是关键字,而malloc和free是方法。

     1 #include "String.h"
     2 #include <iostream>
     3 String::String(const char* src)
     4 {
     5  if(src==NULL)
     6  {
     7   _data = (char*)malloc(1);
     8   _data[0]='';
     9  }
    10  else
    11  {
    12   _data = (char*)malloc(strlen(src)+1);
    13   strcpy(_data,src);
    14  }
    15 }
    16 
    17 String::String(const String& rhs)
    18 {
    19  _data = (char*)malloc(strlen(rhs._data)+1);
    20  strcpy(_data,rhs._data);
    21 }
    22 
    23 String& String::operator=(const String& rhs)
    24 {
    25  if(this == &rhs)
    26  {
    27   return *this;
    28  }
    29  free(_data);
    30  _data = (char*)malloc(strlen(rhs._data)+1);
    31  strcpy(_data,rhs._data);
    32  return *this;
    33 }
    34 
    35 String::~String()
    36 {
    37  free(_data);
    38 }
  • 相关阅读:
    LeetCode506-相对名次
    LeetCode496-下一个更大的元素(遍历)
    Redis查询超时问题排查及原因分析
    SQL Server 输出消息
    SQL Server按时间分段统计数据
    C# 数据保存到Excel
    查看SQL Server数据库恢复进度
    输入百度网址地址后面有tn小尾巴解决办法
    SQL Server 查询数据大小
    Sping Boot + Spring Security + Mybaits + Logback +JWT验证 项目开发框架搭建
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3565246.html
Copyright © 2011-2022 走看看