c++ string类实现

5 篇文章 0 订阅
4 篇文章 0 订阅

http://blog.csdn.net/kennyrose/article/details/7486389

在C++中,对于一个空的类,编译器一般默认它会有4个成员函数:构造函数,析构函数,复制构造函数和赋值函数

[cpp]  view plain  copy
  1. #include<stdio.h>  
  2. #include<string.h>  
  3. #include<stdlib.h>  
  4. #include<iostream>  
  5.   
  6. using namespace std;  
  7.   
  8. class CMyString  
  9. {  
  10.         friend std::ostream& operator<<( std::ostream& os, const CMyString& str);  
  11.         private:  
  12.                 char* m_pData; //  私有变量保存字符串  
  13.         public:  
  14.                 CMyString( const char* str = NULL ); // 构造函数  
  15.                 CMyString( const CMyString& str ); // 拷贝构造函数  
  16.                 ~CMyString( void ); // 析构函数  
  17.                 CMyString& operator=( const CMyString& str ); // 赋值运算符  
  18.                 CMyString operator+( const CMyString& str ); // 字符串连接   
  19.                 bool operator==( const CMyString& str ); // 判断相等  
  20.                 char operator[]( int idx ); // 数组索引  
  21.                 int getLength(); // 返回长度  
  22. };  
  23.   
  24. CMyString::CMyString( const char* str )  
  25. {  
  26.         if ( !str )  
  27.         {  
  28.                 this->m_pData = 0;  
  29.         }  
  30.         else  
  31.         {  
  32.                 this->m_pData = new char[ strlen( str ) + 1 ];  
  33.                 strcpy( this->m_pData, str );  
  34.         }  
  35. }  
  36.   
  37. CMyString::CMyString( const CMyString& str )  
  38. {  
  39.         if ( !str.m_pData )  
  40.         {  
  41.                 this->m_pData = 0;  
  42.         }  
  43.         else  
  44.         {  
  45.                 this->m_pData = new char[ strlen( str.m_pData ) + 1 ];  
  46.                 strcpy( this->m_pData, str.m_pData );  
  47.         }  
  48. }  
  49.   
  50. CMyString::~CMyString( void )  
  51. {  
  52.         if ( this->m_pData)  
  53.         {  
  54.                 delete[] this->m_pData;  
  55.                 this->m_pData = 0;  
  56.         }  
  57. }  
  58.   
  59. CMyString& CMyString::operator=( const CMyString& str)  
  60. {  
  61.         if ( this != &str )  
  62.         {  
  63.                 delete[] this->m_pData;  
  64.                 if ( !str.m_pData )  
  65.                 {  
  66.                         this->m_pData = 0;  
  67.                 }  
  68.                 else  
  69.                 {  
  70.                         this->m_pData = new char[ strlen( str.m_pData ) + 1 ];  
  71.                         strcpy( this->m_pData, str.m_pData );  
  72.                 }  
  73.         }  
  74.         return *this;  
  75. }  
  76.   
  77. CMyString CMyString::operator+( const CMyString& str )  
  78. {  
  79.         CMyString newString;  
  80.         if ( !str.m_pData )  
  81.         {  
  82.                 newString = *this;  
  83.         }  
  84.         else if ( !this->m_pData )  
  85.         {  
  86.                 newString = str;  
  87.         }  
  88.         else  
  89.         {  
  90.                 newString.m_pData = new char[ strlen( this->m_pData ) + strlen( str.m_pData ) + 1 ];  
  91.                 strcpy( newString.m_pData, this->m_pData );  
  92.                 strcat( newString.m_pData, str.m_pData );  
  93.         }  
  94.   
  95.         return newString;  
  96.   
  97. }  
  98.   
  99. bool CMyString::operator==( const CMyString& str )  
  100. {  
  101.         if ( strlen(this->m_pData) != strlen( str.m_pData ) )  
  102.         {  
  103.                 return false;  
  104.         }  
  105.         else  
  106.         {  
  107.                 return strcmp( this->m_pData, str.m_pData ) ? false : true;  
  108.         }  
  109. }  
  110.  //实现了[]函数,调用[] return  array element
  111. char CMyString::operator[]( int idx)  
  112. {  
  113.         if ( idx > 0 && idx < strlen( this->m_pData ) )  
  114.         return this->m_pData[idx];  
  115. }  
  116.   
  117. int CMyString::getLength()  
  118. {  
  119.         return strlen(this->m_pData);  
  120. }  
  121.   
  122. std::ostream& operator<<( std::ostream& os, const CMyString& str )  
  123. {  
  124.         os<< str.m_pData;  
  125.         return os;  
  126. }  
  127.   
  128. int main()  
  129. {  
  130.   
  131.         CMyString str1("i love ");  
  132.         CMyString str2("u baby");  
  133.         std::cout << "str1: " << str1 << std::endl;  
  134.         std::cout << "str2: " << str2 << std::endl;  
  135.         CMyString str3 = str1 + str2;  
  136.         std::cout << "str3: " << str3 << std::endl;  
  137.   
  138.         CMyString str4 = str2;  
  139.         str1 = str2;  
  140.         std::cout << "str4: " << str4 << std::endl;  
  141.         std::cout << "str1: " << str1 << std::endl;  
  142.   
  143.         std::cout << "str3 length: " << str3.getLength() << std::endl;  
  144.         std::cout << "str3[3]= " << str3[3] << std::endl;  
  145.   
  146.         std::cout << ( str1 == str3 ) << std::endl;  
  147.         return 0;  
  148. }  
[cpp]  view plain  copy
  1.   
[cpp]  view plain  copy
  1. // main output  
[cpp]  view plain  copy
  1. str1: i love  
  2. str2: u baby  
  3. str3: i love u baby  
  4. str4: u baby  
  5. str1: u baby  
  6. str3 length: 13  
  7. str3[3]= o  
  8. 0  
 

c++ string类实现



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值