自己动手封装一个string类

来源:互联网 发布:nginx 增加lua模块 编辑:程序博客网 时间:2024/05/17 20:14

通常c++笔试题里会要求封装一个string类,这里面的确考查了对c++应用的能力,我这个人有个不好就是记性不怎么好,所以要靠记录下来给以后用到的时候做个参考. 

#include <string.h>

class string {
 char *str;
 int size;
public:
 string() {
  size = 0;
  str = NULL;
 }

 virtual ~string() {
  empty();
 }

 string(const char *s) {
  if (s) {
   size = strlen(s)+1;
   str = (char *)malloc(size);
   strcpy(str, s);
  } else {
   size = 0;
   str = NULL;
  }
 }

 string(const string& s) {
  if (s.str) {
   size = strlen(s.str)+1;
   str = (char *)malloc(size);
   strcpy(str, s.str);
  } else {
   size = 0;
   str = NULL;
  }
 }

 void empty(void) {
  if (str) {
   size = 0;
   free(str);
   str = NULL;
  }
 }

 string& operator=(const string& s) {
  if (this != &s) {
   empty();
   if (s.str) {
    size = strlen(s.str)+1;
    str = (char *)malloc(size);
    strcpy(str, s.str);
   }
  }

  return *this;
 }

 string operator+(const string& s) const {
  if (str && s.str) {
   string _s;
   _s.size = strlen(str) + strlen(s.str) + 1;
   _s.str = (char *)malloc(size);
   strcpy(_s.str, str);
   strcat(_s.str, s.str);
   return _s;
  } else {
   return str ? str : s.str;
  }
 }

 bool operator==(const string& s) const {
  if (str && s.str) {
   return !strcmp(str, s.str);
  } else if (!str && !s.str) {
   return true;
  } else {
   return false;
  }
 }

 operator char *() {
  return str;
 }

 operator const char *() const {
  return str;
 }
};