• 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 }
  • 相关阅读:
    4 Python+Selenium的元素定位方法(link/partial link)
    3 Python+Selenium的元素定位方法(id、class name、name、tag name)
    2 Selenium3.0+Python3.6环境搭建
    1 Selenium打开浏览器
    目录处理文件&链接命令
    DOS批处理命令-@命令
    DOS批处理命令-echo
    吐槽一二三
    编码神器之sublime(插件安装)
    两天来学习C的感受
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3565246.html
Copyright © 2020-2023  润新知