⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 string01.hpp

📁 teach yourself C++ in 21 days 第五版
💻 HPP
字号:
 0:  // Listing 16.1 The String Class
 1:  
 2:  #include <iostream>
 3:  #include <string.h>
 4:  using namespace std;
 5:  
 6:  class String
 7:  {
 8:    public:
 9:       // constructors
10:      String();
11:      String(const char *const);
12:      String(const String &);
13:      ~String();
14:  
15:      // overloaded operators
16:      char & operator[](int offset);
17:      char operator[](int offset) const;
18:      String operator+(const String&);
19:      void operator+=(const String&);
20:      String & operator= (const String &);
21:  
22:      // General accessors
23:      int GetLen()const { return itsLen; }
24:      const char * GetString() const { return itsString; }
25:      // static int ConstructorCount;
26:  
27:    private:
28:      String (int);         // private constructor
29:      char * itsString;
30:      unsigned short itsLen;
31:  
32:  };
33:  
34:  // default constructor creates string of 0 bytes
35:  String::String()
36:  {
37:     itsString = new char[1];
38:     itsString[0] = '\0';
39:     itsLen=0;
40:     // cout << "\tDefault string constructor\n";
41:     // ConstructorCount++;
42:  }
43:  
44:  // private (helper) constructor, used only by
45:  // class methods for creating a new string of
46:  // required size.  Null filled.
47:  String::String(int len)
48:  {
49:     itsString = new char[len+1];
50:     for (int i = 0; i<=len; i++)
51:        itsString[i] = '\0';
52:     itsLen=len;
53:     // cout << "\tString(int) constructor\n";
54:     // ConstructorCount++;
55:  }
56:  
57:  // Converts a character array to a String
58:  String::String(const char * const cString)
59:  {
60:     itsLen = strlen(cString);
61:     itsString = new char[itsLen+1];
62:     for (int i = 0; i<itsLen; i++)
63:        itsString[i] = cString[i];
64:     itsString[itsLen]='\0';
65:     // cout << "\tString(char*) constructor\n";
66:     // ConstructorCount++;
67:  }
68:  
69:  // copy constructor
70:  String::String (const String & rhs)
71:  {
72:     itsLen=rhs.GetLen();
73:     itsString = new char[itsLen+1];
74:     for (int i = 0; i<itsLen;i++)
75:        itsString[i] = rhs[i];
76:     itsString[itsLen] = '\0';
77:     // cout << "\tString(String&) constructor\n";
78:     // ConstructorCount++;
79:  }
80:  
81:  // destructor, frees allocated memory
82:  String::~String ()
83:  {
84:     delete [] itsString;
85:     itsLen = 0;
86:     // cout << "\tString destructor\n";
87:  }
88:  
89:  // operator equals, frees existing memory
90:  // then copies string and size
91:  String& String::operator=(const String & rhs)
92:  {
93:     if (this == &rhs)
94:        return *this;
95:     delete [] itsString;
96:     itsLen=rhs.GetLen();
97:     itsString = new char[itsLen+1];
98:     for (int i = 0; i<itsLen;i++)
 9:        itsString[i] = rhs[i];
00:     itsString[itsLen] = '\0';
01:     return *this;
02:     // cout << "\tString operator=\n";
03:  }
04:  
05:  //non constant offset operator, returns
06:  // reference to character so it can be
07:  // changed!
08:  char & String::operator[](int offset)
09:  {
10:     if (offset > itsLen)
11:        return itsString[itsLen-1];
12:     else
13:        return itsString[offset];
14:  }
15:  
16:  // constant offset operator for use
17:  // on const objects (see copy constructor!)
18:  char String::operator[](int offset) const
19:  {
20:     if (offset > itsLen)
21:        return itsString[itsLen-1];
22:     else
23:        return itsString[offset];
  :  }
25:  
26:  // creates a new string by adding current
27:  // string to rhs
28:  String String::operator+(const String& rhs)
29:  {
30:     int  totalLen = itsLen + rhs.GetLen();
31:     String temp(totalLen);
32:     int i, j;
33:     for (i = 0; i<itsLen; i++)
34:        temp[i] = itsString[i];
35:     for (j = 0; j<rhs.GetLen(); j++, i++)
36:        temp[i] = rhs[j];
37:     temp[totalLen]='\0';
38:     return temp;
39:  }
40:  
41:  // changes current string, returns nothing
42:  void String::operator+=(const String& rhs)
43:  {
44:     unsigned short rhsLen = rhs.GetLen();
45:     unsigned short totalLen = itsLen + rhsLen;
46:     String  temp(totalLen);
47:     int i, j;
48:     for (i = 0; i<itsLen; i++)
49:        temp[i] = itsString[i];
50:     for (j = 0; j<rhs.GetLen(); j++, i++)
51:        temp[i] = rhs[i-itsLen];
52:     temp[totalLen]='\0';
53:     *this = temp;
54:  }
55:  
56:   // int String::ConstructorCount = 0; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -