• 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 }
  • 相关阅读:
    JS 百度地图路书---动态路线
    jQuery---创建和添加节点
    CSS基础
    第一篇:前端知识之HTML内容
    JS高级---为内置对象添加原型方法
    JS DOM属性+JS事件
    Vue-router
    vue使用kkfileview文件预览功能
    JS高级---案例:验证密码的强度
    promise是怎么来的?
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3565246.html
Copyright © 2020-2023  润新知