Chinaunix首页 | 论坛 | 博客
  • 博客访问: 433876
  • 博文数量: 62
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 740
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-10 21:59
个人简介

付出,终有回报!

文章分类

全部博文(62)

文章存档

2018年(6)

2017年(24)

2016年(6)

2015年(26)

分类: C/C++

2018-01-19 17:15:56

该类实现了C++中string类中定义的基本方法,可以看出其类似于容器。

点击(此处)折叠或打开

  1. #include <iostream>
  2. using namespace std;

  3. class CString
  4. {
  5. public:
  6.      //带一个默认值参数的构造函数
  7.     CString(const char *p = NULL)
  8.     {
  9.         if(p == NULL)
  10.         {
  11.             mptr = new char[1]; // new char();
  12.             *mptr = '\0';
  13.         }
  14.         else
  15.         {
  16.             mptr = new char[strlen(p)+1];
  17.             strcpy(mptr, p);
  18.         }
  19.     }

  20.     //拷贝构造函数
  21.     CString(const CString &src)
  22.     {
  23.         mptr = new char[strlen(src.mptr)+1];
  24.         strcpy(mptr, src.mptr);
  25.     }

  26.     //赋值函数
  27.     CString& operator=(const CString &src)
  28.     {
  29.         if(this == &src)
  30.             return *this;

  31.         delete[] mptr;

  32.         mptr = new char[strlen(src.mptr)+1];
  33.         strcpy(mptr, src.mptr);
  34.         return *this;
  35.     }

  36.      //析构函数
  37.     ~CString()
  38.     {
  39.         delete[] mptr;
  40.         mptr = NULL;
  41.     }

  42.     //>运算符重载函数
  43.     bool operator>(const CString &src)const
  44.     {
  45.         return strcmp(mptr, src.mptr) > 0;
  46.     }

  47.     //<运算符重载函数
  48.     bool operator<(const CString &src)const
  49.     {
  50.         return strcmp(mptr, src.mptr) < 0;
  51.     }

  52.     //=运算符重载函数
  53.     bool operator==(const CString &src)const
  54.     {
  55.         return strcmp(mptr, src.mptr) == 0;
  56.     }

  57.     //求字符串的大小,不包括0
  58.     int size()const
  59.     {
  60.         return strlen(mptr);
  61.     }

  62.     // operator[]
  63.     char& operator[](int index)
  64.     {
  65.         return *(mptr+index);
  66.     }

  67.     //将该对象转为字符指针
  68.     const char* c_str()const
  69.     {
  70.         return mptr;
  71.     }

  72.     //定义迭代器
  73.     class iterator
  74.     {
  75.     public:
  76.         iterator(char *p = NULL):ptr(p){}
  77.         
  78.         //迭代器判不等
  79.         bool operator!=(const iterator &it)
  80.         {
  81.             return (ptr != it.ptr);
  82.         }
  83.         //迭代器前置++运算符重载函数
  84.         void operator++()
  85.         {
  86.             ++ptr;
  87.         }
  88.          //迭代器解引用运算符重载函数
  89.         char& operator*()
  90.         {
  91.             return *ptr;
  92.         }

  93.     private:
  94.         char *ptr;
  95.     };

  96.     //返回指向字符串首元素的迭代器
  97.     iterator begin()
  98.     {
  99.         return iterator(mptr);
  100.     }

  101.     //返回指向字符串最后一个元素之后位置的迭代器
  102.     iterator end()
  103.     {
  104.         return iterator(mptr + strlen(mptr));
  105.     }
  106. private:
  107.     char *mptr;
  108.     friend CString operator+(const CString &left, const CString &right);
  109.     friend ostream& operator<<(ostream &out, const CString &src);

  110. };

  111. //全局的+运算符重载函数
  112. CString operator+(const CString &left, const CString &right)
  113. {
  114.     char *p = new char[strlen(left.mptr) + strlen(right.mptr) + 1];
  115.     strcpy(p, left.mptr);
  116.     strcat(p, right.mptr);
  117.     CString str(p);
  118.     delete []p;
  119.     return str;
  120. }

  121. //全局的输出运算符重载函数
  122. ostream& operator<<(ostream &out, const CString &src)
  123. {
  124.     out<<src.mptr;
  125.     return out;
  126. }

阅读(2813) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~