Программирование >>  Дополнительные возможности наследования 

1 ... 157 158 159 [ 160 ] 161 162 163 ... 265


Листинг IS.B. Перегрузка operator<<()

2 3 4 5 6 7 8 9

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

#include <iostream.h> #include <string.h>

class String {

public: конструкторы StringO;

String(const char .const); String(const String &); StringO;

перегруженные операторы char & operator[](int offset); char operator[](int offset) const; String operator+(const String&); void operator+=(const Stringi); String & operator= (const String &); friend ostream& operator<<

( ostream& theStream,String& theString); Общие методы доступа int 6etLen()const { return itsLen; } const char * GetStringO const { return itsString; }

private:

String (int); закрытый конструктор char * itsString; unsigned short itsLen;

конструктор, заданный no умолчанию, создает строку длиной О байт

String::String()

itsString = new char[1]; itsString[0] = \ 0 ; itsLen=0;

cout \ tDefault string constructor\ n ; ConstructorCount++;

закрытый конструктор, используемый только

методами класса для создания новой строки

указанного размера, заполненной значениями NULL,

String;:String(int len)

itsString = new char[l-.; Ч]; for (int 1=0; i<=len, i++)



49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98

itsString[i] = \ О; itsLen=len;

cout \ tString(int) constructor\ n ; ConstructorCount++;

Преобразует массив символов в строку String::String(const char const cString) {

itsLen = strlen(cString); itsString = new char[itsLen+1]; for (int i = 0; i<itsLen; i++) itsString[i] = cString[i]; itsString[itsLen]=\ 0 ;

cout \ tString(char*) constructor\ n ; ConstructorCount++;

конструктор-копировщик

string::String (const String & rhs)

itsLen=rhs.GetLen(); itsString = new char[itsLen+1]; for (int i = 0; i<itsLen:i++) itsString[i] = rhs[i]; itsString[itsLen] = \ 0;

cout \ tString(String&) constructor\ n ; ConstructorCount++;

деструктор освобождает занятую память

String:: String ()

delete [] itsString; itsLen = 0;

cout \ tString destructor\ n ;

оператор равенства освобождает память, а затем

копирует строку и размер

String& String::operator=(const String & rhs)

if (this == &rhs)

return .this; delete [] itsString; itsLen=rhs.GetLen(); itsString = new char[itsLen+1]; for (int 1 = 0; KitsLen; i++)

itsString[i] = rhs[i]; itsString[itsLen] = \ 0;



99: return this;

100: cout X tString operator=\ n ;

101: }

102:

103: неконстантный оператор индексирования,

104: возвращает ссылку на символ, который можно

105: изменить!

106: char & String::operator[](int offset)

107: {

108: if (offset > itsLen)

109: return itsString[itsLen-1];

110: else

111; return itsString[offset];

112: }

113:

114: константный оператор индексирования,

115: используется для константных объектов (см. конструктор-копировщик!)

116: char String::operator[](int offset) const

117: {

118: if (offset > itsLen)

119: return itsString[itsLen-1];

120: else

121: return itsString[offset];

122: }

123:

124: создает новую строку, добавляя текущую

125: строку к rhs

126: String String::operator+(const String& rhs)

127: {

128: int totalLen = itsLen + rhs.GetLen(); 129: String temp(totalLen); 130: int 1, j;

131: for (i = 0; KitsLen; i++)

132: temp[i] = itsString[i];

133: for (j = 0; j<rhs.6etLen(); i++)

134: temp[i] = rhs[]];

135: temp[totalLen]=\ 0 ;

136: return temp;

137: }

138:

139: изменяет текущую строку, ничего не возвращая

140: void String::operator+=(const String& rhs)

141: {

142: unsigned short rhsLen = rhs.6etLen(); 143: unsigned short totalLen = itsLen + rhsLen; 144: String temp(totalLen); 145: int i, j;

146: for (1 = 0; KitsLen; i++)

147: temp[i] = itsString[i];

148: for (j = 0, 1=0; j<rhs.6etLen(); i++)



1 ... 157 158 159 [ 160 ] 161 162 163 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика