设为首页 加入收藏

TOP

C++中String类的实现
2015-11-21 00:59:56 来源: 作者: 【 】 浏览:1
Tags:String 实现

#pragma once
#include 
   
     #include 
    
      #define _SIZE_ 100 using namespace std; class Count { public: Count() :count(1){} void add() { count++; } void dec() { count--; } int getcount() { return count; } private: int count; }; class String { public: String(const char *s = "") { copy(ptr,s); } String(const String &s) { copy(ptr,s.ptr); counT.add(); } String& operator=(const String& s) { if (this != &s) { String tmp(s.ptr); char *temp = tmp.ptr; tmp.ptr = ptr; ptr = temp;//内存安全。 } return *this; } ~String() { if (counT.getcount() == 1) { cout << ptr << " :del" << endl; delete[]ptr; } } friend ostream& operator<<(ostream& os, String &s) { os << s.ptr; return os; } friend istream& operator>>(istream& is, String &s) { char buf[_SIZE_]; is >> buf; s.copy(s.ptr,buf); return is; } String& operator += (const String &s) { char *buf = new char[strlen(ptr) + strlen(s.ptr) + 1]; strcpy(buf, ptr); strcat(buf,s.ptr); copy(ptr,buf); return *this; } String& operator +=(const char *str) { char *buf = new char[strlen(ptr) + strlen(str) + 1]; strcpy(buf,ptr); strcat(buf,str); copy(ptr,buf); return *this; } bool operator != (const String &s) { return strcmp(ptr,s.ptr); } bool operator ==(const String &s) { return !strcmp(ptr,s.ptr); } private: void copy(char *&p,const char *s) { p = new char[strlen(s) + 1]; strcpy(p,s); } private: char *ptr; Count counT; }; 
    
   
#include 
   
     #include "String.h" using namespace std; int main() { String s("123"); String s1("456"); s += s1; return 0; }
   

“`

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ - 1422 Air Raid 二分图最大.. 下一篇BZOJ 2648(SJY摆棋子-KD_Tree)

评论

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