设为首页 加入收藏

TOP

C++实现类String--含构造函数以及重载)),((,),(,==,=
2015-07-20 17:43:38 来源: 作者: 【 】 浏览:1
Tags:实现 String-- 构造 函数 以及 重载

编写类String的构造函数、析构函数和赋值函数。

重载了输入(>>),输出(<<),大于(>),小于(<),赋值(=),等于(==)运算符。

因为篇幅原因,没有写关于strlen(),strcpy()函数的实现.

//String 类
//用到了strlen、strcpy函数
#include
  
   
#include
   
     using namespace std; class String { public: String(const char *str=NULL);//构造普通函数 String(const String &other);//拷贝构造函数 ~String(void); String &operator=(const String &other);//重载= friend bool operator==(const String &s1,const String &s2);//重载== friend bool operator>(const String &s1,const String &s2);//重载> friend bool operator<(const String &s1,const String &s2);//重载< friend ostream &operator<<(ostream &,const String &other);//重载<< friend istream &operator>>(istream &,String &other);//重载>> private: char *m_data; }; String::String(const char *str) { if(str==NULL) { m_data=new char[1]; m_data='\0'; } else { int length=strlen(str); m_data=new char[length+1]; strcpy(m_data,str); } } String::~String(void) { delete []m_data; } String::String(const String &other) { int length=strlen(other.m_data); m_data=new char[length+1]; strcpy(m_data,other.m_data); } String & String::operator=(const String &other) { if(&other==this) return *this; delete []m_data; int length=strlen(other.m_data); m_data=new char[length+1]; strcpy(m_data,other.m_data); return *this; } ostream& operator<<(ostream&output,const String &other) { output<
    
     >(istream&input,String &other) { char p[256]; input>>p; int length=strlen(p); other.m_data=new char [length+1]; strcpy(other.m_data,p); return input; } bool operator==(const String&s1,const String&s2) { int len_s1=strlen(s1.m_data); int len_s2=strlen(s2.m_data); if(len_s1!=len_s2) return false; int i=0; while(s1.m_data[i]==s2.m_data[i]) { i++; if(i==len_s1) return true; } return false; } bool operator>(const String&s1,const String&s2) { int len=strlen(s1.m_data)>strlen(s2.m_data)?strlen(s2.m_data):strlen(s1.m_data); for(int i=0;i
     
      s2.m_data[i]) { return true; } else if(s1.m_data[i]==s2.m_data[i]) { continue; } else { return false; } } if(strlen(s1.m_data)>strlen(s2.m_data)) return true; else return false; } bool operator<(const String&s1,const String&s2) { int len=strlen(s1.m_data)>strlen(s2.m_data)?strlen(s2.m_data):strlen(s1.m_data); for(int i=0;i
      
       s2.m_data[i]) { return false; } else if(s1.m_data[i]==s2.m_data[i]) { continue; } else { return true; } } if(strlen(s1.m_data)
       
        >s; cout<<"s:"<
        
         ' '<' if(s>b) cout<<"s>b"<
          
          


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇zoj 3810 A Volcanic Island(构造) 下一篇uva 12086 - Potentiometers (树..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++中智能指针的性能 (2025-12-25 03:49:29)
·如何用智能指针实现c (2025-12-25 03:49:27)
·如何在 C 语言中管理 (2025-12-25 03:20:14)
·C语言和内存管理有什 (2025-12-25 03:20:11)
·为什么C语言从不被淘 (2025-12-25 03:20:08)